2013-03-16 112 views
11

我不明白我做錯了什麼。我已經創建VS2012一個打字稿項目,並創建了一個名爲「Vector.ts」的文件,在名爲「物理學」的子目錄:TypeScript - 模塊在運行時未定義

// Module 
module Physics { 

    // Class 
    export class Vector { 
     constructor(public x: number) { } 
    } 

} 

而且,我有以下app.ts文件:

/// <reference path="Physics/Vector.ts" /> 

window.onload =() => { 
    var vector = new Physics.Vector(6); 
}; 

該項目成功編譯,但是當我啓動它,我得到以下異常:

0x800a1391 - JavaScript runtime error: 'Physics' is undefined

我不明白我在做什麼錯?

謝謝。

回答

5

如果您將AMD樣式模塊與模塊加載器(如Require.Js)一起使用,則需要導入語句。在這裏看到史蒂夫的接受的答案:https://stackoverflow.com/a/14919495/1014822您的代碼看起來類似:

import Physics = module("Physics/Vector"); 

var vector = new Physics.Vector(6); 

...你不會需要這樣的:如果你不使用模塊加載/// <reference path="Physics/Vector.ts" />

,你只需要確保你的html頁面中包含你的Vector.js輸出文件,並確保它在你的應用程序文件之前加載。在這種情況下,您可以使用/// <reference path="Physics/Vector.ts" />來告訴TS哪裏可以找到您的模塊以使智能感知等工作。

+0

感謝您的回答。我如何確保我的Vector.js文件在app.js之前加載? – gipouf 2013-03-16 16:50:55

+0

剛剛找到一個關於它的好教程 - http://blorkfish.wordpress.com/2012/10/23/typescript-organizing-your-code-with-amd-modules-and-require-js/。 – gipouf 2013-03-16 17:01:22

1

只是爲了保持完整性,如果你使用System,那麼你會使用importfunction

System.import("Physics/Vector"); 

如果你這樣做是爲Angular 2,那麼你會希望你的bootstrapimport之前做到這一點