【问题标题】:Typescript export module explicitly creates new namespace?打字稿导出模块显式创建新命名空间?
【发布时间】:2014-01-19 22:37:39
【问题描述】:

我刚刚注意到这种行为,无法完全理解它。

所以我有两个打字稿文件 File1.ts File2.ts

文件1.ts:

module myNamespace {
    export class myClass1 {
         someMethod(myClass2) // use this class
    }
}

文件2.ts:

module myNamespace {
    export class myClass2 {
    }
}

这很有效,因为两个类在编译后都在同一个命名空间中。

但是,当我将 File2.ts 更改为此

export module myNamespace {
    export class myClass2 {

    }
}

当我在模块关键字前面添加 export 关键字时,打字稿编译器抱怨它在 File1.ts 中找不到 myClass2

这是为什么呢?是因为 export 明确设置了一个新的命名空间,而不管它是否已经存在?为 File2.ts 创建的 javascript 几乎相同,除了

define(["require", "exports"], function(require, exports) { .. }

这是否定义了一个我必须深入研究的新闭包?

对不起,如果这有点令人费解。

【问题讨论】:

    标签: javascript namespaces typescript


    【解决方案1】:

    我认为这只是编译器的要求。在操场上,您的代码出现此错误:

    一切正常,但是,如果我将代码更改为:

    或者这个..

    在这两种情况下,输出代码是相同的。

    【讨论】:

    • 我想这是有道理的。如果你导出一个,编译器希望你导出所有的命名空间
    • -1 用于避免潜在问题(这些声明是否在同一个文件中非常相关)并在代码示例本来可以的情况下使用屏幕截图
    • 没有意识到这些文件,我的错。我在学。但是,请关闭屏幕截图,伙计。 :) 我认为第一张截图很好地解释了我所看到的以及我是如何得出结论的。
    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2016-11-05
    • 1970-01-01
    相关资源
    最近更新 更多