0

我有一个问题,我想来自我使用 Type Script 的 ASP.NET MVC 项目。为了进行测试,我使用 HTML TypeScript 模板创建了一个项目。我可以完美地创建两个模块并在另一个模块中使用其中一个,如下所示:

import authModule = module("Authenticate");
import testModule = module("TestModule");

export module SiteMaster {
  authModule.Authenticate.run();
  testModule.TestModule.run();
}

它正在正确生成这样的 JavaScript:

define(["require", "exports", "Authenticate", "TestModule"], function(require, exports, __authModule__, __testModule__) {
  var authModule = __authModule__;
  var testModule = __testModule__;

  (function (SiteMaster) {
    authModule.Authenticate.run();
    testModule.TestModule.run();
  })(exports.SiteMaster || (exports.SiteMaster = {}));
})

然后我将我的 Typescript 项目中的编译器命令复制到我的 ASP.NET MVC 4.5。

  <Target Name="BeforeBuild">
<Exec Command="&quot;$(PROGRAMFILES)\Microsoft SDKs\TypeScript\0.8.0.0\tsc&quot; --module amd @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />

它正在正确编译。显然编译正确。

但是有一个问题:当我在我的 ASP.NET MVC 应用程序中创建相同的模块时,我在导入行中收到编译错误:

The name '"Authenticate"' does not exist in the current scope
A module cannot be aliased to a non-module

TestModule 也是如此。

我在下面包含了对该模块的引用,但错误仍然存​​在,并在 Typescript 模板中查看该引用不是必需的。

/// <reference path='Authenticate.ts'/>

这里有什么问题?

4

2 回答 2

1

我想我已经解决了这个问题。正如我怀疑它在编译器命令中。事实上,我并没有使用编译器命令生成 TypeScript 模板。

我在我的 ASP.NET MVC 项目中使用了这个命令:

  <Target Name="BeforeBuild">
<Exec Command="&quot;$(PROGRAMFILES)\Microsoft SDKs\TypeScript\0.8.0.0\tsc&quot; --module amd -target ES5 @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" IgnoreExitCode="true" />

这个编译器命令在这里工作:

  <Target Name="BeforeBuild">
<Exec Command="&quot;$(PROGRAMFILES)\Microsoft SDKs\TypeScript\0.8.0.0\tsc&quot; --module amd @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />

有人可以解释一下目标参数的含义是什么。

于 2012-10-18T12:40:15.000 回答
0

如果您使用的是 ASP.NET 4.5,我个人建议使用捆绑包,而不是 AMD 模块加载 - 除非您有令人信服的理由不这样做。

--module amd从 Exec 配置中删除并将您的语句import转换为/// <reference path=语句并在 bundle_config 中设置您的包。

如果你的目标是 ES5,你可以使用:

--target ES5

但只有在使用 getter 和 setter 时才需要这样做,这是唯一不能在 ECMAScript 3 上运行的 TypeScript 语言功能。

于 2012-10-18T14:41:45.530 回答