Typescript: Arbeta runt typdefinitionsfel för JavaScript inbyggda


Jag vill använda FormData i TypeScript. Tyvärr stöder de genererade TypeScript-definitionerna inte en FormData-konstruktor med ett Form-element som detaljerat i TypeScript Issue #1074.

Jag har följande kod:

var formEl = <HTMLFormElement> document.getElementById("myForm");
var formData = new FormData(formEl);

Koden ger följande fel eftersom den genererade definitionen är fel:

fel TS2346: De angivna parametrarna matchar ingen signatur för anropsmålet.

Jag vill använda följande deklaration:

declare var FormData: {
    prototype: FormData;
    new (form?: HTMLFormElement): FormData;
}

Men om jag inkluderar den typdefinitionen får jag detta fel:

fel TS2403: Efterföljande variabeldeklarationer måste ha samma typ. Variabeln 'FormData' måste vara av typen '{ new(): FormData; prototype: FormData; }', men här har den typen '{ new (form?: HTMLFormElement): FormData; prototype: FormData; }'.

Hur kan jag arbeta runt detta problem?

Svar #1

Hur kan jag arbeta runt detta problem?

Potential 1:

Skicka en PR.

Potential 2:

Uppdatera den levererade lib.d.ts på plats:

declare var FormData: {
    prototype: FormData;
    new (form?: HTMLFormElement): FormData;
}

Potential 3:

Kopiera och anpassa lib.d.ts och kompilera med --noLib och referera manuellt till din anpassade lib.d.ts.

Potential 4:

Omkör typkontrollen

var formEl = <HTMLFormElement> document.getElementById("myForm");
var formData = new window['FormData'](formEl);

Svar #2

Det finns en bugg i VS2017 TypeScript-biblioteken (vilket kan ha blivit åtgärdat i uppdateringen i april 2017). Du kan kringgå felet du nämnde genom att stänga av LanguageService i Verktyg|Alternativ|Textredigerare|JavaScript/TypeScript|LanguageService. Avmarkera bara kryssrutan "Aktivera den nya JavaScript-språktjänsten."

Fler detaljer om problemet finns på https://developercommunity.visualstudio.com/content/problem/25310/unload-projects-hangs-on-close-solution.html

Relaterade artiklar