1

相关问题:

我之前的问题 1

我之前的问题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 的模块。但是,当我尝试使用私有静态函数时,我注意到虽然在智能感知中函数旁边出现了一个锁,但该函数并不是真正私有的并且可以访问。为了解决这个问题,有人建议我应该尝试使用模块而不是类,所以我编码如下:

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 在保存时进行编译的方式有关。我读了一些地方,应该一次为所有文件编译打字稿,而不是一次只编译一个文件。那是对的吗?

4

1 回答 1

0

作为对此的跟进,TypeScript 0.9 alpha 预览版(不稳定,但正在开发中)包含对模块的更改,这些更改应该使跨多个文件定义模块变得更加容易。

0.9 重大更改 wiki 页面

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

这可能对您的问题有所帮助,但您必须尝试一下,看看是否有效。

于 2013-05-01T08:24:36.927 回答