Visual Studio中的打字稿AMD模块

mvb*_*ffa 5 typescript

我使用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]执行解决方法.


Val*_*tin 4

我非常确信这是编译器中的错误。我使用以下源文件重现了该问题:

验证.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 团队提交错误。