【问题标题】:TypeScript: imported module classes are not visibleTypeScript:导入的模块类不可见
【发布时间】:2013-02-16 18:44:56
【问题描述】:

我正在测试带有多个模块的 typescript 编译器,这些模块将被编译为 AMD 模块。

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

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”类型的值上不存在“Person”属性

输出的 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 --cmets --declaration --target ES5 --module AMD $FilePath$

这里的编译器有什么问题?

谢谢。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    这是您需要的代码...

    import TT = module("test");
    
    var p = new TT.test.Person();
    

    还有一个简短的解释。

    当您使用 AMD 或 CommonJS 加载模块并且使用 import 语句时,您不需要使用 reference cmets。 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();
    

    【讨论】:

    • "文件本身就是模块,所以你代码中的TT代表test.ts。"那是关键。现在可以了。谢谢。我会按照您的建议删除“文件内模块”,直到我真正需要它为止。
    • 你是把“import”语句放在“class”语句里面还是放在外面? (我想将一个模块导入另一个类)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2023-04-02
    • 2017-12-07
    • 2020-12-10
    相关资源
    最近更新 更多