2014-05-15 96 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

相關問題