2014-02-27 105 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