打字稿:解决javascript内置的类型定义错误

Joe*_*Joe 5 types typescript

我想在打字稿中使用FormData.遗憾的是,生成的typescript定义文件不支持带有Form元素的FormData构造函数,详见 Typescript Issue#1074.

我有以下代码:

var formEl = <HTMLFormElement> document.getElementById("myForm");
var formData = new FormData(formEl);
Run Code Online (Sandbox Code Playgroud)

代码提供以下错误,因为生成的定义是错误的:

错误TS2346:提供的参数与呼叫目标的任何签名都不匹配.

我想使用以下声明:

declare var FormData: {
    prototype: FormData;
    new (form?: HTMLFormElement): FormData;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我包含该类型定义,我会收到此错误:

错误TS2403:后续变量声明必须具有相同的类型.变量'FormData'必须是'{new():FormData; 原型:FormData; }',但这里有类型'{new(form?:HTMLFormElement):FormData; 原型:FormData; }".

我该如何解决这个问题?

bas*_*rat 3

我该如何解决这个问题?

潜力1:

发送 PR。

潜力2:

更新已发货lib.d.ts到位:

declare var FormData: {
    prototype: FormData;
    new (form?: HTMLFormElement): FormData;
}
Run Code Online (Sandbox Code Playgroud)

潜力3:

复制并自定义lib.d.ts并编译--noLib并手动引用您的自定义lib.d.ts.

潜力4:

绕过类型检查器

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