1

我正在为我的项目创建一个模块(不确定它是否应该是模块/类/或无)。

我最喜欢这种方式。

///<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();
    }
}

我可以从导入中直接访问我的“模块”中定义的东西。或者,如果我将它创建为打字稿模块。我必须补充:

信号器 = 信号器.SignalRService;

从导入中访问我的模块。当我没有在我的打字稿文件中将它声明为模块时,如果我错过了一些东西,谁能给我一点启发?

4

1 回答 1

1

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

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

当你这样做export module SignalRService并且你不使用AMDJS 的编译选项时 - 你将所有的实现移到我们的全局上下文中。如果您不这样做export module,而是进行AMD编译 - 全局上下文的问题也得到了解决。因此,我们可以说 - 如果您的应用程序基于AMD- 您可能不需要export module.

于 2013-04-14T18:49:30.393 回答