2012-10-06 83 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

相关问题