为什么在AMD编译时使用打字稿中的模块和类?

时间:2013-04-14 18:14:16

标签: typescript

我正在为我的项目创建一个模块(不确定它应该是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;

从导入中访问我的模块。任何能够在我的打字稿文件中将其声明为模块的时候,如果我错过了某些东西可以开导我的人吗?

1 个答案:

答案 0 :(得分:1)

从我的角度来看 - 您正在使用两种不同的方法在TypeScript(JavaScript)中定义模块。

模块可帮助您确保不会与外部库发生冲突。例如,如果您将在脚本中定义Common类,同时您的一个外部库将具有相同名称的类,并且它们都将在Global Context中 - 您将遇到问题,其中一个实现将覆盖另一个。

执行export module SignalRService并且不对JS使用AMD编译选项时 - 您将所有实现移动到全局上下文中。当您不执行export module但进行AMD编译时 - 全局上下文的问题也得到修复。因此,我们可以说 - 如果您的应用程序基于AMD - 您可能不需要export module