2016-02-04 104 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文件的确切形状,你会说这足以回答你的问题吗? –

相关问题