2014-05-15 102 views
0

平原JS中创建一个打字稿类的对象实例可以说我有以下文件tests.ts如何使用AMD模块

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__但它找不到成员“迎宾”。

回答

4

您忘记了顶级module上的export关键字,因此顶部代码块实际上不会将任何可见的内容导出为外部模块。

此外,参考Modules in TypeScript“不用命名空间”陷阱:

如果你从内部模块转换程序外部 模块,它可以很容易使用,看起来像一个文件来结束这样的:

shapes.ts

export module Shapes { 
    export class Triangle { /* ... */ } 
    export class Square { /* ... */ } } 
} 

这里的顶级模块形状包装三角形和方形没有 的原因。这对消费者来说是你的模块的困惑和愤怒:

shapeConsumer.ts

import shapes = require('./shapes'); var t = new 
shapes.Shapes.Triangle(); // shapes.Shapes? 

在打字稿外部模块的一个主要特点是,两个不同的 外部模块将永远不会有助于名字到相同的范围。 由于外部模块的使用者决定要分配哪个名称 ,因此不需要主动将命名空间中的导出符号包装到 中。

为了重申为什么你不应该试图命名空间你的外部模块 内容,命名空间的一般想法是提供逻辑 结构的分组和防止名称冲突。由于 外部模块文件本身已经是一个逻辑分组,并且其顶层名称由导入它的代码定义,因此不需要为输出对象使用额外的模块层。

+0

优秀的答案,thx! – Dyna

相关问题