2012-10-16 52 views
4

我有一個類,它看起來像這樣:無法從文件加載類打字稿

export module GameModule { 
    export class Game { 
     private boardContainer: HTMLElement; 
     private board: number[][]; 

     constructor (container: HTMLDivElement) { 
      this.boardContainer = container; 
      this.board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]; 

      this.drawGrid(); 
     } 

     drawGrid() { 

     } 
    } 
} 

和主要應用:

import GameModule = module("./GameModule"); 

window.onload =() => { 
    new GameModule.GameModule.Game(<HTMLDivElement> document.getElementById('content')); 
}; 

但是,當我試圖編譯代碼,我會出錯:

>tsc --module amd app.tss 
app.tss(1, 27): The name '"./GameModule"' does not exist in the current scope 
app.tss(1, 27): A module cannot be aliased to a non-module type 
app.tss(4, 8): Expected car, class, interface, or module 

我的代碼出了什麼問題?

+0

嗨@skayred!你想要加載模塊的第一個文件的名稱是什麼?第一個文件的名稱必須是「GameModule.ts」。你能證實這一點嗎? – Diullei

回答

6

你的代碼對我來說編譯得很好。以下是我有:

GameModule.ts

export module GameModule { 
    export class Game { 
     private boardContainer: HTMLElement; 
     private board: number[][]; 

     constructor (container: HTMLDivElement) { 
      this.boardContainer = container; 
      this.board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]; 

      this.drawGrid(); 
     } 

     drawGrid() { 

     } 
    } 
} 

Main.ts

import GameModule = module("./GameModule"); 

window.onload =() => { 
    new GameModule.GameModule.Game(<HTMLDivElement> document.getElementById('content')); 
}; 

都在同一個目錄。當我編譯它與

tsc --module amd Main.ts 

編譯器報告沒有問題。你能否檢查一下你是否可以編譯這兩個類?另外,請發佈您的完整代碼(如果可能)。從錯誤消息我會假設你的模塊駐留在另一個目錄中。

+0

我的主類是'app.ts',GameModule是'GameModule.ts'。在我的命名中是否存在問題? – skayred

+0

@skayred我只注意到你編譯了app.tss。你的問題是否是一個錯字? 'GameModule.ts'是正確的名字。您正在使用外部模塊,因此模塊導入需要包含該模塊的文件的相對名稱。 – Valentin

+0

我又重現了這個錯誤。只需創建新的VS2012 TypeScript項目,將'app.js'內容更改爲我的並創建'GameModule.ts'。當你嘗試編譯它時,你會得到一個錯誤 – skayred