首页 文章

TypeScript:导入的模块类不可见

提问于
浏览
2

我正在使用多个模块测试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):属性'人'在'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 $

编译器有什么问题?

谢谢 .

1 回答

  • 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();
    

相关问题