2014-12-17 18 views
5

Tôi muốn sử dụng FormData trong bản ghi. Thật không may, các generated typescript definition files không hỗ trợ một constructor FormData với một yếu tố hình thức như chi tiết trong Typescript Issue #1074.Loại bản ghi: Làm việc xung quanh lỗi định nghĩa loại cho nội dung javascript

Tôi có đoạn mã sau:

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

Mã này cung cấp cho các lỗi sau vì generated definition là sai:

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

Tôi muốn sử dụng khai báo như sau:

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

Nhưng, nếu tôi bao gồm định nghĩa kiểu đó, tôi nhận được lỗi này:

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; }'.

Tôi làm cách nào để khắc phục sự cố này?

Trả lời

3

How can I work around this issue?

tiềm năng 1:

Gửi một PR.

tiềm năng 2:

Cập nhật các vận chuyển lib.d.ts tại chỗ:

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

Tiềm năng 3:

Sao chép và tùy chỉnh lib.d.ts và biên dịch với --noLib và tự tham khảo tùy chỉnh của bạn lib.d.ts.

Tiềm năng 4:

Bypass loại trình kiểm tra

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

tiếc, tôi đã hy vọng tôi chỉ có thể bao gồm tờ khai mới. – Joe

0

Có đã là một bug on GitHub. Nó được nhắm mục tiêu để sửa chữa trong TypeScript 1.6.

Cho đến lúc đó, đây là một cách giải quyết đơn giản trong nguyên cảo:

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

Và javascript tạo ra, chỉ là những gì bạn muốn:

var formData = new FormData(formEl); 

này nên tiếp tục làm việc ngay cả khi họ sửa chữa các lib. d.ts phát hành.

1

Có lỗi trong thư viện bản ghi VS2017 (có thể đã được sửa trong bản cập nhật tháng 4 năm 2017). Bạn có thể xung quanh lỗi bạn đã lưu ý bằng cách tắt LanguageService trong Tools | Options | Text Editor | JavaScript/TypeScript | LanguageService Chỉ cần bỏ chọn "Bật dịch vụ ngôn ngữ JavaScript mới". hộp kiểm.

Thông tin chi tiết về vấn đề này đang trên https://developercommunity.visualstudio.com/content/problem/25310/unload-projects-hangs-on-close-solution.html

Các vấn đề liên quan