0

Type Script を使用した ASP.NET MVC プロジェクトから発生したと思われる問題があります。テストのために、HTML TypeScript テンプレートを使用してプロジェクトを作成しました。次のように、2 つのモジュールを完全に作成し、そのうちの 1 つを別のモジュールで使用できます。

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 amdExec 構成から削除し、importステートメントを/// <reference path=ステートメントに変換し、bundle_config でバンドルをセットアップします。

ES5 をターゲットにしている場合は、次を使用します。

--target ES5

ただし、これは、ECMAScript 3 で動作しない唯一の TypeScript 言語機能である getter と setter を使用している場合にのみ行う必要があります。

于 2012-10-18T14:41:45.530 に答える