导入Node模块时TypeScript编译错误?

时间:2014-02-27 16:55:11

标签: javascript node.js typescript

我正在尝试使用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没有此模块的定义?如果是这样我将如何实现定义,让我感到困惑的是prototypenew()类型XMLHttpRequest。这是一个递归引用还是会说空类声明就足够了?

2 个答案:

答案 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文件,以便从打字稿类型检查中获益。