TypeScript中的别名外部模块

时间:2012-12-13 02:29:23

标签: javascript typescript

我正在开发一个项目,我希望将源代码打包到多个模块(在不同的文件中)。我这样做,所以我只能在某些页面上包含某些部分以减轻整体重量。

我遇到的问题是我无法找出一种语法,它会让我对外部模块进行别名,而且我真的不想每次都写出完整的模块(因为它通常类似于ABCD组织)。

编译时,我有一个抓取所有文件的脚本,因此我将外部定义文件作为第一个参数。

如果我写出整个模块(A.B.C.D.MyClass),它就会认出来。如果我试着这样做:

module MyModule {
    import ABCD = A.B.C.D;

    export MyClass {
        //...
        public myFunc(obj:ABCD.MyClass) {}
    }
}

它会告诉我'The name "ABCD" does not exist in the current scope."'

如果重要,我会导出所有类,但不导出任何模块。我生成了包含的定义文件(因此编译时包含A.B.C.D的定义文件在我的列表中是第一个。)

有什么想法吗?

更新

详细说明我的文件结构,我有类似的东西:

      • a.ts
      • b.ts
    • Ç
      • c.ts
      • d.ts

然后在其他地方我也可能有:

    • d
      • e.ts
      • f.ts
      • 电子
        • g.ts
        • h.ts

在这种情况下,我会将第一个集合构建成类似A.B.ts的东西,通过以下方式编译它们:

tsc A/B/a.ts A/B/b.ts A/B/C/c.ts A/B/C/d.ts --out A.B.ts --declarations

然后,当我去打包时,我会做类似的事情:

tsc /path/to/A.B.d.ts A/D/e.ts A/D/f.ts A/D/E/g.ts A/D/E/h.ts --out A.D.ts --declarations

我通过递归通过我指定的一组文件动态构建这些编译器命令,以便获取那些编译器。

1 个答案:

答案 0 :(得分:1)

如果要将模块打包在多个文件中以便使用AMD模块加载模式加载它们,则需要执行以下操作...

文件名是模块名称,不添加module声明

例如......

module MyModule {
    export class MyClass {
    }
}

实际上应该是MyModule.ts并且看起来像这样:

export class MyClass {
}

然后您将使用以下方式加载它:

import my = module('MyModule');

我认为您目前正在尝试将捆绑式TypeScript代码与加载的模块样式混合在一起,这是不兼容的。捆绑时,文件名无关紧要,因为您负责在页面上获取脚本。当您使用AMD或CommonJS时,您需要遵守文件命名规则(即文件名等于模块名称)并忽略封闭的module

作为旁注,0.8.1.1中存在影响此问题的错误,因此如果您使用的是0.8.1.1,则可能需要仔细阅读:http://typescript.codeplex.com/discussions/405800