我正在尝试使用this,但编译器正在生成以下内容:
Client.ts(2,5): error TS2134: Subsequent variable declarations must have the same type.
Variable 'XMLHttpRequest' must be of type '{ prototype: XMLHttpRequest; LOADING: number;
DONE: number; UNSENT: number; OPENED: number; HEADERS_RECEIVED: number; new():
XMLHttpRequest; }', but here has type 'any'.
作为参考,产生错误的行是:
var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
我是否正确地认为这是因为node.d.ts没有此模块的定义?如果是这样我将如何实现定义,让我感到困惑的是prototype
和new()
类型XMLHttpRequest
。这是一个递归引用还是会说空类声明就足够了?
答案 0 :(得分:1)
这是因为XMLHttpRequest
在lib.d.ts中定义:
declare var XMLHttpRequest: {
prototype: XMLHttpRequest;
new (): XMLHttpRequest;
LOADING: number;
DONE: number;
UNSENT: number;
OPENED: number;
HEADERS_RECEIVED: number;
}
这与您XMLHttpRequest
的定义冲突,实际上已解析为any
var XMLHttpRequest
如果此lib与浏览器XMLHttpRequest
兼容,则可以执行(拆分声明和分配)。这样编译器就不会尝试将其重新定义为any
:
var XMLHttpRequest;
XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
如果不是,我建议您使用其他名称,或使用--noLib编译器标志进行编译。
答案 1 :(得分:0)
是node.d.ts没有该声明。
我有两种可能的选项供您手动创建node-XMLHttpRequest.d.ts
。 (我找不到已定义的)或使用var XMLHttpRequest = <any>(require('xmlhttprequest').XMLHttpRequest);
如果您在代码中经常使用此库,我建议您定义node-XMLHttpRequest.d.ts
文件,以便从打字稿类型检查中获益。