我正在使用多个模块测试typescript编译器,这些模块将被编译为AMD模块。
我有一个模块" 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;
})
现在在同一文件夹中有test2.ts,它将使用模块" test"
test2.ts:
///<reference path="test.ts"/>
import TT = module("test");
var p = TT.Person;
编译器在这里抱怨:
src / ts / test2.ts(5,11):属性&#39; Person&#39;不存在类型&#39; TT&#39;
的值
输出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 $
这里的编译器有什么问题?
感谢。
答案 0 :(得分:3)
以下是您需要的代码......
import TT = module("test");
var p = new TT.test.Person();
快速解释。
当您使用AMD或CommonJS加载模块并且使用import
语句时,您不需要使用reference
条评论。 import
可以完成您需要的一切。
此外,文件本身就是模块,因此代码中的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();