我使用Visual Studio 2012 Ultimate开始使用TypeScript.我在编译器命令中更改了我的MSBuild,包括--module amd标记.编译器开始生成AMD模块.
我在Nuget Packages中包含了我的项目RequireJS,并在我的主HTML中包含这一行:
<script type="text/javascript" data-main="scripts/SiteMaster" src="scripts/require.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
我有两个模块SiteMaster和Authenticate.SiteMaster模块很简单:
export module SiteMaster {
import auth = module("Authenticate");
auth.Authenticate.run();
}
Run Code Online (Sandbox Code Playgroud)
它只导入Authenticate模块并调用函数run().SiteMaster的js是这样的:
define(["require", "exports"], function(require, exports) {
(function (SiteMaster) {
var auth = __auth__;
auth.Authenticate.run();
})(exports.SiteMaster || (exports.SiteMaster = {}));
Run Code Online (Sandbox Code Playgroud)
})
问题是,当我浏览解决方案时,我收到错误:
Microsoft JScript runtime error: '__auth__' is undefined
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题 ???
提前致谢.
小智 5
感谢您带来这个mvbaffa!
如果您将SiteMaster.ts更改为:Valentin的示例:
import auth = module("Authenticate");
export module SiteMaster {
auth.Authenticate.run();
}
Run Code Online (Sandbox Code Playgroud)
通过将import语句移出模块声明,它将生成正确的js代码.我将在TypeScript codeplex网站上打开一个错误,并确保修复此问题.如果这是一个阻塞问题,您可以对当前编译器[v0.8]执行解决方法.
我非常确信这是编译器中的错误。我使用以下源文件重现了该问题:
验证.ts
export var Authenticate = {
run : function() {
console.log("Run!");
}
}
Run Code Online (Sandbox Code Playgroud)
SiteMaster.ts
export module SiteMaster {
import auth = module("Authenticate");
auth.Authenticate.run();
}
Run Code Online (Sandbox Code Playgroud)
测试.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>
Run Code Online (Sandbox Code Playgroud)
我使用编译打字稿
tsc --module amd SiteMaster.ts Authenticate.ts
Run Code Online (Sandbox Code Playgroud)
当我在 Firefox 中使用 Firebug 打开Firefox 时test.html,出现以下错误:
ReferenceError: __auth__ is not defined
var auth = __auth__;
Run Code Online (Sandbox Code Playgroud)
编译后的代码SiteMaster.js如下所示:
define(["require", "exports"], function(require, exports) {
(function (SiteMaster) {
var auth = __auth__;
auth.Authenticate.run();
})(exports.SiteMaster || (exports.SiteMaster = {}));
})
Run Code Online (Sandbox Code Playgroud)
从 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 = {}));
})
Run Code Online (Sandbox Code Playgroud)
这与语言规范中的示例一致。如果其他人同意,我们可能会向 TypeScript 团队提交错误。
| 归档时间: |
|
| 查看次数: |
4535 次 |
| 最近记录: |