2014-12-17 19 views
5

Voglio usare FormData in dattiloscritto. Sfortunatamente, lo generated typescript definition files non supporta un costruttore di FormData con un elemento del modulo come descritto in Typescript Issue #1074.Dattiloscritto: aggirare l'errore di definizione del tipo per javascript incorporato

Ho il seguente codice:

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

Il codice dà il seguente errore perché il generated definition è sbagliato:

error TS2346: Supplied parameters do not match any signature of call target.

voglio usare la seguente dichiarazione:

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

Ma, se includo quella definizione di tipo, ottengo questo errore:

error TS2403: Subsequent variable declarations must have the same type. Variable 'FormData' must be of type '{ new(): FormData; prototype: FormData; }', but here has type '{ new (form?: HTMLFormElement): FormData; prototype: FormData; }'.

Come posso risolvere questo problema?

risposta

3

How can I work around this issue?

potenziale 1:

Invia un PR.

potenziale 2:

Aggiornare il spediti lib.d.ts sul posto:

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

Potenziale 3:

Copia e personalizzare lib.d.ts e compilare con --noLib e manualmente riferimento vostra abitudine lib.d.ts.

Potenziale 4:

Bypass del tipo-checker

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

Bummer, speravo solo ho potuto includere la nuova dichiarazione. – Joe

0

C'è già un bug on GitHub. È destinato al fixing in TypeScript 1.6.

Fino ad allora, si tratta di una semplice soluzione a macchina:

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

E il JavaScript generato, proprio quello che si voleva:

var formData = new FormData(formEl); 

Questo dovrebbe continuare a lavorare anche dopo che fissano il lib. problema di d.ts.

1

C'è un errore nelle librerie dattiloscritto VS2017 (che potrebbero essere state corrette nell'aggiornamento di aprile 2017). Puoi aggirare l'errore che hai notato disattivando LanguageService in Strumenti | Opzioni | Editor di testo | JavaScript/TypeScript | LanguageService Basta deselezionare "Abilita il nuovo servizio di lingua JavaScript". casella di controllo.

Maggiori dettagli della questione sono https://developercommunity.visualstudio.com/content/problem/25310/unload-projects-hangs-on-close-solution.html

Problemi correlati