我正在为我的项目创建一个模块(不确定它应该是module / class /或none)。
我主要是这样做的。
///<reference path="..\typings\knockout\knockout.d.ts" />
///<reference path="..\typings\requirejs\require.d.ts"/>
///<reference path="hubs.d.ts" />
//export module SignalRService {
export var deployHub = $.connection.deployHub;
export var status = ko.observable();
export function intialize() {
$.connection.start()
.done(() => { this.status("Connection Succesfull") } )
.fail(() => { this.status("Connection Failed")});
}
//}
这导致我能够这样做:
var ko: KnockoutStatic = require('ko');
var hostNodes = ko.observableArray([]);
import signalr = module('SignalRService');
export class AppViewModel {
///Properties
hostNodes = hostNodes;
error = ko.observable();
signalr = signalr;
///Constructor
constructor() {
signalr.intialize();
}
}
我可以从导入中直接访问我的“模块”中定义的内容。另外,如果我将其创建为打字稿模块。我必须补充:
signalr = signalr.SignalRService;
从导入中访问我的模块。任何能够在我的打字稿文件中将其声明为模块的时候,如果我错过了某些东西可以开导我的人吗?
答案 0 :(得分:1)
从我的角度来看 - 您正在使用两种不同的方法在TypeScript(JavaScript)中定义模块。
模块可帮助您确保不会与外部库发生冲突。例如,如果您将在脚本中定义Common类,同时您的一个外部库将具有相同名称的类,并且它们都将在Global Context中 - 您将遇到问题,其中一个实现将覆盖另一个。
执行export module SignalRService
并且不对JS使用AMD
编译选项时 - 您将所有实现移动到全局上下文中。当您不执行export module
但进行AMD
编译时 - 全局上下文的问题也得到修复。因此,我们可以说 - 如果您的应用程序基于AMD
- 您可能不需要export module
。