当我尝试在打字稿中执行此操作时遇到编译错误(TS2503无法找到名称空间):
import mylib = require("./mylib");
let person: mylib.Person = new mylib.Person("A");
我有一个mylib
目录,其中包含两个文件:
$ cat mylib/index.ts
import Person = require("./Person");
export = { Person: Person }
$ cat mylib/Person.ts
export = class Person{
name: String;
constructor(name) {
this.name = name;
}
}
问题出在类型声明let person: mylib.Person = new mylib.Person("A");
上。如果我将其替换为let person = new mylib.Person("A");
,它将进行编译,但是我想显式声明该类型。同时,我想避免导入mylib/Person
。所以我想避免这种解决方案:
import Person = require("./mylib/Person");
let person: Person
我决定将所有内容都放在mylib
中,以具有单个访问点,并且无需导入每个单独的子模块。解决编译错误的另一种方法是什么?理想情况下,我将通过先前导入的Person
模块访问mylib
。
答案 0 :(得分:0)
这是一种非常有趣的方法,但是问题是您不能使用这样的类型(作为对象的属性)。
相反,您可以这样做:
import { Person } = require("./mylib");
let person: Person = new Person("A");
这样,您就可以使用对象分解,并且可以看到,这是在TypeScript中导入类的常用方法。