在模块内部使用模块进行类型声明无法编译(TS2503无法找到名称空间)

时间:2019-02-15 23:15:30

标签: typescript

当我尝试在打字稿中执行此操作时遇到编译错误(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

1 个答案:

答案 0 :(得分:0)

这是一种非常有趣的方法,但是问题是您不能使用这样的类型(作为对象的属性)。

相反,您可以这样做:

import { Person } = require("./mylib");
let person: Person = new Person("A");

这样,您就可以使用对象分解,并且可以看到,这是在TypeScript中导入类的常用方法。