当在typescript中分割多个文件时,我无法使模块内的模块工作

时间:2012-11-20 13:02:37

标签: javascript typescript

相关问题:

My previous question 1

My previous question 2

我最近将我的代码从使用静态方法的类更改为使用模块和导出函数的代码。以下是我之前的例子:

Inner 1.ts
/// <reference path="../typescript/reference.ts" />
module Outer {
    class Inner1 {
        static mvcOnFailure(message: string) {
            var a = 1;
        }
    }
}
Inner 2.ts
/// <reference path="../typescript/reference.ts" />
module Outer {
    class Inner2{
        static mvcOnFailure(message: string) {
            var b = 1;
        }
    }
}

这编译成.js没有问题。我有一个名为Admin的外部模块,然后在另一个名为Dialog的模块内部,另一个名为Grid。然而,当我尝试使用私有静态函数时,我注意到虽然在intellisense中函数旁边出现了一个锁,但该函数并不是真正的私有且可以被访问。为了解决这个问题,有人向我建议我应该尝试使用模块而不是类,所以我编码如下:

Inner 1.ts
/// <reference path="../typescript/reference.ts" />
module Outer {
    export module Inner1 {
        export function mvcOnFailure(message: string) {
            var a = 1;
        }
    }
}

Inner 2.ts
/// <reference path="../typescript/reference.ts" />
module Outer {
    export module Inner2{
        export function mvcOnFailure(message: string) {
            var b = 1;
        }
    }
}

reference.ts
/// <reference path="../Outer/Inner2.ts" />
/// <reference path="../Outer/Inner1.ts" />

编译时我有一个很大的问题,因为现在每个.js都有 函数用于外部模块中的所有内容,如下所示:

Inner 1.js

var Outer;
(function (Outer) {
    (function (Inner1) {
        function mvcOnFailure(message) {
            var a = 1;
        }
        Inner1.mvcOnFailure = mvcOnFailure;
    })(Outer.Inner1 || (Outer.Inner1 = {}));
    var Inner1 = Outer.Inner1;
})(Outer || (Outer = {}));

var Outer;
(function (Outer) {
    (function (Inner2) {
        function mvcOnFailure(message) {
            var b = 1;
        }
        Inner2.mvcOnFailure = mvcOnFailure;
    })(Outer.Inner2 || (Outer.Inner2 = {}));
    var Inner2 = Outer.Inner2;
})(Outer || (Outer = {}));

是时候放弃这个想法了,好像我在多个.ts文件中包含了相同模块的部分功能,然后它添加了.js中的所有内容。

更新:

不确定这一点。现在看来这个问题可能与我安装网络必需品有关。我禁用了它,现在我没有从其他文件的java脚本中出现的一个文件的函数中得到问题。这可能与web essentials在保存时编译的方式有关。我读了一些地方,应该一次为所有文件编译打字稿,而不是一次只编译一个文件。这是对的吗?

1 个答案:

答案 0 :(得分:0)

正如对此的跟进一样,TypeScript 0.9 alpha预览(不稳定但正在处理)包含对模块的更改,这些更改应该可以更轻松地跨多个文件定义模块。

来自0.9 breaking changes wiki page

  

'module'关键字不再创建类型描述:在0.9.0中,a   在命名空间,类型和角色之间进行更明确的区分   值。模块现在只对命名空间和值有贡献   不再贡献一种类型。原因:这种角色的简化   模块允许模块现在更多地扩展类和函数   容易。

这可能会对您的问题有所帮助,但您必须尝试查看是否存在问题。