2013-02-16 189 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

相關問題