2012-10-06 122 views
4

我從使用Visual Studio 2012 Ultimate的TypeScript開始。我在編譯器命令中更改了我的MSBuild,包括--module amd標記。編譯器開始生成AMD模塊。Visual Studio中的Typescript AMD模塊

我有包括來自的NuGet包我的項目RequireJS,在我的主HTML加入這一行:

<script type="text/javascript" data-main="scripts/SiteMaster" src="scripts/require.min.js"></script> 

我有兩個模塊SITEMASTER和驗證。模塊SiteMaster很簡單:

export module SiteMaster { 
    import auth = module("Authenticate"); 
    auth.Authenticate.run(); 
} 

它只是導入Authenticate模塊並調用函數run()。對於SITEMASTER JS的是這樣的:

define(["require", "exports"], function(require, exports) { 
(function (SiteMaster) { 
    var auth = __auth__; 

    auth.Authenticate.run(); 
})(exports.SiteMaster || (exports.SiteMaster = {})); 

})

的問題是,當我瀏覽的解決方案,我收到錯誤:

Microsoft JScript runtime error: '__auth__' is undefined 

我怎樣才能解決這個問題? ?

在此先感謝。

回答

4

我幾乎相信,這是編譯器中的錯誤。

Authenticate.ts

export var Authenticate = { 
    run : function() { 
     console.log("Run!"); 
    } 
} 

SiteMaster.ts

export module SiteMaster { 
    import auth = module("Authenticate"); 
    auth.Authenticate.run(); 
} 

的test.html

<html> 
    <head> 
     <script type="text/javascript" data-main="SiteMaster" src="http://requirejs.org/docs/release/2.1.0/minified/require.js"></script> 
    </head> 
    <body> 
     <p>Test</p> 
    </body> 
</html> 
:我一直在使用下面的源文件複製問題

我編譯使用

tsc --module amd SiteMaster.ts Authenticate.ts 

的打字稿當我在Firefox打開test.html Firebug的,我得到以下錯誤:

ReferenceError: __auth__ is not defined 
var auth = __auth__; 

SiteMaster.js編譯後的代碼如下:

define(["require", "exports"], function(require, exports) { 
    (function (SiteMaster) { 
     var auth = __auth__; 

     auth.Authenticate.run(); 
    })(exports.SiteMaster || (exports.SiteMaster = {})); 

}) 

從TypeScript的語言規範部分判斷9.4.3 AMD模塊我希望沿着線的東西:

define(["require", "exports", "authenticate"], function(require, exports, authenticateModule) { 
    (function (SiteMaster) { 
     var auth = authenticateModule; 

     auth.Authenticate.run(); 
    })(exports.SiteMaster || (exports.SiteMaster = {})); 

}) 

這是符合語言規範的例子線。如果其他人同意,我們可能會向TypeScript團隊提交一個錯誤。

+0

我同意。前進瓦倫丁。提交錯誤。 – mvbaffa

+1

@mvbaffa似乎穆拉特已經在打字稿網站上提交了一個錯誤。 – Valentin

+0

@Valentin你能提供一個鏈接到這個bug嗎? TIA – thomaux

5

感謝您帶來這mvbaffa!

如果您更改SiteMaster,請在Valentin的樣本上。ts到:

import auth = module("Authenticate"); 
export module SiteMaster { 
    auth.Authenticate.run(); 
} 

通過將import語句移出模塊聲明它將生成正確的js代碼。我將在TypeScript codeplex網站上打開一個錯誤,並確保它得到修復。如果這對您來說是一個阻塞問題,您可以在當前編譯器[v0.8]上執行解決方法。

+0

它的工作。不幸的是,我不能使用答案來顯示生成的代碼,StackOverflow不允許我。我沒有這麼畢業。無論如何非常感謝。 – mvbaffa

相關問題