2016-01-04 58 views
0

我使用RequireJs連接一些打字稿類時遇到問題。 在.ts文件中,我使用模塊語法和AMD模塊。我的主文件是GameLoader.ts,它返回遊戲的一個實例。還有比如我creaiting世界例如:使用requireJS加載一些打字稿模塊

import World = require('Resources/Scripts/Game/Entities/Game/World'); 
... 
var world = new World(json.world.level, json.world.size, json.world.passMap); 

,它工作正常 - 世界真正需要的功能

但同時在同一個文件(GameLoader.ts):

import Camera = require('Resources/Scripts/Game/Presentation/Camera/Camera'); 
... 
var camera = new Camera(); 

相機是空的物體(而不是功能)未捕獲類型錯誤:相機不是函數 該文件被加載,但調試器顯示其內容a未使用 - 函數定義中的斷點不起作用。但是在加載主程序之前觸發世界斷點。

尋找錯誤我試圖從Camera.ts中刪除所有的東西。 去除我從另一個文件同樣的方式稱爲空相機後(temp.ts):

import c = require('Resources/Scripts/Game/Presentation/Camera/Camera'); 
var cam = new c(); 
console.log(cam); 

和它的工作。

在這兩種情況下由編譯器生成的Ts生成的代碼(對於Camera.js)看起來都是一樣的。 以相同的方式調用編譯文件 - 通過調用RequireJs API。

也許問題是指向文件GameLoader的循環引用? 但我的應用程序從遊戲類(從GameLoader導出的實例)構建,僅用於他們的實例。

對不起,我的英語不好。

+1

Camera是否有定義函數並返回正確的對象? – rainerhahnekamp

+0

是的。 Camera.js以define函數開始。 她在相機功能(TS中的類)返回參考。但由於GameLoader的某些原因,它只是空的對象。 –

回答

1

Perhaps the problem is cyclical references that point to a file GameLoader?

可能。在原子打字稿中給出相關性視圖a https://github.com/TypeStrong/atom-typescript#dependency-view

+0

我試圖設置atom和這個插件,但是他根本無法識別導入語句,即使在安裝tsconfig之後。所以我更喜歡VS或VS Code。這對我來說都很好。 現在週期性參考:相機具有導入GameLoader的CameraBehaviour的導入。它需要讀取攝像頭位置校正的配置。 RequireJs無法處理它嗎? –

+0

是的,您可以在初始加載時獲得未定義http://requirejs.org/docs/api.html#circular – basarat

0

我用RequireJs拍攝了我的腿。那裏的問題,我試圖從共享模塊返回實例。每個依賴都試圖創造新的。所以在第一次 - 在我的情況下 - 一些模塊錯過了加載其他階段的階段。