可以说我有以下文件tests.ts
:
module tests {
export class Greeter
{
sayHello() {
console.log("hello world");
}
}
}
并将其编译为和AMD模块。我该如何在常规JavaScript(不是打字稿!)文件中创建Greeter的对象实例?
我在想类似的东西:
require(['tests', function(tests) {
var greeter = new tests.Greeter();
greeter.sayHello();
}
但这似乎不起作用-调试器向我显示测试是针对的,__proto__
但我找不到其中的成员“ Greeter”。
您已经export
在顶层忘记了关键字module
,因此顶层代码块实际上不会导出任何可见的外部模块。
另外,请参考TypeScript中的模块“ Needless Namespacing”陷阱:
如果要将程序从内部模块转换为外部模块,则很容易得到一个如下所示的文件:
shapes.ts
export module Shapes {
export class Triangle { /* ... */ }
export class Square { /* ... */ } }
}
Shapes的顶级模块无缘无故地包裹了Triangle和Square。这会使您的模块的使用者感到困惑和烦恼:
shapeConsumer.ts
import shapes = require('./shapes'); var t = new
shapes.Shapes.Triangle(); // shapes.Shapes?
TypeScript中外部模块的主要功能是两个不同的外部模块将永远不会在同一作用域中提供名称。由于外部模块的使用者决定要为其分配的名称,因此无需主动将导出的符号包装在名称空间中。
为了重申为什么不应该为外部模块内容命名空间,命名空间的一般思想是提供结构的逻辑分组并防止名称冲突。因为外部模块文件本身已经是一个逻辑分组,并且其顶层名称由导入该文件的代码定义,所以不必为导出的对象使用附加的模块层。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句