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
