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

时间:2014-12-17 04:30:59

标签: types typescript

我想在打字稿中使用FormData。遗憾的是,generated typescript definition files并不支持带有表单元素的FormData构造函数,如Typescript Issue #1074中所述。

我有以下代码:

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

代码出现以下错误,因为generated definition错误:

  

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

我想使用以下声明:

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

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

  

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

如何解决此问题?

3 个答案:

答案 0 :(得分:3)

  

如何解决此问题?

潜力1:

发送公关。

潜力2:

更新已发货的lib.d.ts

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

潜力3:

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

潜力4:

绕过类型检查器

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

答案 1 :(得分:1)

VS2017打字稿库中存在一个错误(可能已在2017年4月更新中修复)。您可以通过关闭工具|选项|文本编辑器| JavaScript / TypeScript | LanguageService中的LanguageService来解决您注意到的错误 只需取消选中“启用新的JavaScript语言服务”即可。复选框。

该问题的更多细节正在进行中 https://developercommunity.visualstudio.com/content/problem/25310/unload-projects-hangs-on-close-solution.html

答案 2 :(得分:0)

已经有bug on GitHub了。它的目标是在TypeScript 1.6中进行修复。

在此之前,这是TypeScript中的一个简单的解决方法:

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

生成的javascript,就是你想要的:

var formData = new FormData(formEl);

即使修复了lib.d.ts问题,它仍应继续工作。