2014-02-27 72 views
2

我试图使用this但是编译器产生如下:关于输入节点模块的TypeScript编译器错误?

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; 

我是正确的假设,这是因为节点.d.ts没有这个模块的定义?如果是这样,我将如何执行定义,让我困惑的位是prototypenew(),类型为XMLHttpRequest。这是一个递归引用还是会说空的类声明足够?

回答

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编译器标志编译。

+0

谢谢,重命名工作。我不知道定义是从其他地方使用的,事后看来很明显它不得不这样做。 – Gybe

0

是的node.d.ts不会有该声明。

我有2个可能的选项供您手动创建node-XMLHttpRequest.d.ts。 (我找不到一个已定义的)或使用var XMLHttpRequest = <any>(require('xmlhttprequest').XMLHttpRequest);

如果您在代码中使用此库很多,我会建议定义node-XMLHttpRequest.d.ts文件以从打字稿类型检查中获益。

+0

选项会产生相同的错误? – Gybe

+0

我已更新该行,你可以尝试 – Dreamwalker