gpt4 book ai didi

TypeScript:导入的模块类不可见

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:39 24 4
gpt4 key购买 nike

我正在测试带有多个模块的 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:

测试.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”

测试2.ts:

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

import TT = module("test");

var p = TT.Person;

编译器在这里提示:

src/ts/test2.ts(5,11): The property 'Person' does not exist on value of type '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$

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

谢谢。

最佳答案

这是您需要的代码...

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

关于TypeScript:导入的模块类不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14913793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com