2013-02-16 151 views
2

我正在测试具有多个模块的typescript编译器,这些模块将被编译为AMD模块。TypeScript:导入的模块类不可见

我有一个模块“测试”和一个单独的文件,将使用它

test.ts:

export module test { 
'use strict'; 

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

    var pp = new Person(); 

} 

test.ts声明模块“测试”和出口它。不出所料 文件编译和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

TEST2 .TS:

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

import TT = module("test"); 

var p = TT.Person; 

编译器会抱怨这里:

的src/TS/test2.ts(5,11):属性 '人' 不上键入 '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 $文件路径$

什么是编译这里的问题?

谢谢。

回答

3

以下是你需要的代码...

import TT = module("test"); 

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

和快速的解释。

当您使用AMD或CommonJS加载您的模块并且您使用import语句时,不需要使用reference评论。 import做你需要的一切。

此外,文件本身就是模块,因此代码中的TT代表test.ts。这个文件(这是一个模块)的内部是另一个明确称为test的模块,所以实际上你有这样的结构:test.test.Person

你可以选择只使用文件模块,并没有添加其他嵌套一个,像这样:

测试。TS

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

var pp = new Person(); 

这将允许您使用非嵌套版本,这就是:

import TT = module("test"); 

var p = new TT.Person(); 
+0

“文件本身是模块,所以TT在你的代码表示test.ts.” 这是关键。它现在有效。谢谢。我会按照你的建议去除“in file module”,直到我看到它的实际需求。 – user2079003 2013-02-17 20:37:10

+0

您是否将“导入”语句放入“类”语句或外部? (我想将模块导入另一个类) – Kokodoko 2016-09-29 17:01:34

相关问题