2016-02-04 101 views
0

我正在使用Visual Studio 2015 IDE。JavaScript類的Typescript定義文件引發運行時錯誤

我有一個文件Messaging.d.ts。它定義了用JavaScript編寫的幾個類。在TS文件中的內容將寫入如下:

declare module 'Messaging' { 
export default class DisplayMessageManager { 
    AddMainMessage(message: string, alertCssClass: string): void; 
    DontShowTipAgain(alertID: string): void; 
    CloseTip(alertID: string, showAlertTime: number): void; 
    TogglePanelDirty(panelID: string, isDirty: boolean, originalState: string): void; 
} 

} 

declare module 'MessagingConstants' { 
export default class Constants { 
    //Bootstrap Alert Classes 
    bsSuccess: string; 
    bsWarning: string; 
    bsDanger: string; 
    bsInfo: string; 
    bsDefault: string; 
    bsPrimary: string; 
} 
} 

當我導入此我app.ts文件(在同一個文件夾中)我使用:

import DisplayMessageManager from 'Messaging'; 
import Constants from 'MessagingConstants'; 

然後:

messageManager: DisplayMessageManager = new DisplayMessageManager(); 
messageConstants: Constants = new Constants(); 

後來我用:

 this.messageManager.AddMainMessage('test', this.messageConstants.bsSuccess); 

這一切都編譯正確。但是,當我運行代碼時,控制檯中的錯誤告訴我它找不到文件'Messaging.js'。我不認爲打字稿定義文件需要編譯成JavaScript文件。我做錯了什麼讓這些外部JavaScript類工作?

+0

我做了我想做的事情是一種黑客。我聲明瞭變量var gMessageManager = new DisplayMessageManager(); var gConstants = new Constants();在我的JavaScript文件中。然後我使用declare var gMessageManager:any;並聲明var gConstants:any;在我的定義文件中。按照我現在所期望的方式工作,但似乎並非是Typescript定義的目標。 –

+0

是否只有一個'Messaging.d.ts'?沒有'Messaging.js'嗎? –

+0

這是正確的。 js文件命名不同,並且其中包含其他代碼。原始js文件名是否需要與定義文件名相對應?似乎應該只是在全局JavaScript範圍內看到它。 –

回答

0

由於您使用的非相對路徑(即"Messaging""./Messaging"代替),如果你使用CommonJS的,這意味着你應該有一個node_modules/Messaging/node_modules/MessagingConstants/和。

我不確定這是否真的是你想要的。你什麼意思may've要做的就是創建以下兩個聲明文件,以反映當地.js文件的確切形狀

Messaging.d.ts

export default class DisplayMessageManager { 
    AddMainMessage(message: string, alertCssClass: string): void; 
    DontShowTipAgain(alertID: string): void; 
    CloseTip(alertID: string, showAlertTime: number): void; 
    TogglePanelDirty(panelID: string, isDirty: boolean, originalState: string): void; 
} 

MessagingConstants.d.ts

export default class Constants { 
    //Bootstrap Alert Classes 
    bsSuccess: string; 
    bsWarning: string; 
    bsDanger: string; 
    bsInfo: string; 
    bsDefault: string; 
    bsPrimary: string; 
} 

然後包括他們是這樣的:

import DisplayMessageManager from './Messaging'; 
import Constants from './MessagingConstants'; 
+0

剛剛嘗試過這條路線。這裏是我仍然收到的錯誤:錯誤:XHR錯誤(404 Not Found)加載http:// localhost:65421/app/Messaging.js \t加載http:// localhost:65421/app/Messaging.js時出錯作爲「./Messaging」從http:// localhost:65421/app/app.js –

+0

我更改了文件的名稱以匹配我的JS文件,然後將這兩個類放入MyJSNamedFile.d.ts文件中,但沒有默認類。現在按預期工作。我沒有意識到它會嘗試以這種方式映射文件名。 –

+0

因爲我上面提到這些.d.ts文件需要匹配.js文件的確切形狀,你會說這足以回答你的問題嗎? –

相關問題