2

AMDモジュールとしてコンパイルされる複数のモジュールでtypescriptコンパイラをテストしています。

モジュール「test」とそれを使用する別のファイルがあります

test.ts:

export module test {
'use strict';

  export class Person {
      age:number = 0;
      sin:number = 1;
  }

  var pp = new Person();

}

test.ts はモジュール「test」を宣言し、それをエクスポートします。ファイルがコンパイルされ、js の出力が期待どおりになります。

test.js:

define(["require", "exports"], function(require, exports) {
(function (test) {
    'use strict';
    var Person = (function () {
        function Person() {
            this.age = 0;
            this.sin = 1;
        }
        return Person;
    })();
    test.Person = Person;        
    var pp = new Person();
})(exports.test || (exports.test = {}));
var test = exports.test;
})

同じフォルダーに、モジュール「test」を使用するtest2.tsがあります

test2.ts:

///<reference path="test.ts"/>

import TT = module("test");

var p = TT.Person;

コンパイラはここで不平を言います:

src/ts/test2.ts(5,11): プロパティ 'Person' はタイプ 'TT' の値に存在しません

ただし、出力 js ファイルは正しいようです: test2.js:

define(["require", "exports", "test"], function(require, exports, __TT__) {
  ///<reference path="test.ts"/>
  var TT = __TT__;

  var p = TT.Person;
})

コンパイラのバージョンは次のとおりです。

0.8.2.0

コマンドラインは次のとおりです。

tsc --comments --declaration --target ES5 --module AMD $FilePath$

ここでのコンパイラの問題は何ですか?

ありがとう。

4

1 に答える 1

3

必要なコードは次のとおりです...

import TT = module("test");

var p = new TT.test.Person();

そして簡単な説明。

AMD または CommonJS を使用してモジュールをロードし、ステートメントを使用している場合、コメントimportを使用する必要はありません。referenceimport必要なすべてを行います。

また、ファイル自体がモジュールであるためTT、コードではtest.ts. このファイル (モジュール) の内部には、明示的に と呼ばれる別のモジュールがあるtestため、実際には次のような構造になっています: test.test.Person.

次のように、別のネストされたモジュールを追加せずに、ファイル モジュールのみを使用することを選択できます。

test.ts

export class Person {
    age:number = 0;
    sin:number = 1;
}

var pp = new Person();

これにより、ネストされていないバージョンを使用できるようになります。

import TT = module("test");

var p = new TT.Person();
于 2013-02-17T08:57:10.090 に答える