我想在打字稿中使用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;
如何解决此问题?
答案 0 :(得分:3)
如何解决此问题?
发送公关。
更新已发货的lib.d.ts
:
declare var FormData: {
prototype: FormData;
new (form?: HTMLFormElement): FormData;
}
复制并自定义lib.d.ts
并使用--noLib
进行编译,并手动引用您的自定义lib.d.ts
。
绕过类型检查器
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问题,它仍应继续工作。