如何在TypeScript中导出类的字典?

时间:2019-12-01 19:27:21

标签: typescript

我正在尝试为一个模块编写TypeScript定义,该定义可导出包含类组的对象。看起来像这样:

class A1 {}
class A2 {}
class B1 {}
class B2 {}

const api = {
  a: { A1, A2 },
  b: { B1, B2 },
};

const x: api.a.A1 = new api.a.A1();
// ------^ TS2503: Cannot find namespace 'api'.

我想从我的模块中将此结构导出为值和类型,因此我可以使用相同的符号。但是您可以看到上面的问题:它要求我为此提供一个名称空间。有没有一种方法可以在不手动将api对象结构(很复杂)作为命名空间的情况下实现?

谢谢。

1 个答案:

答案 0 :(得分:0)

实例的有效类型注释将类似于:

class A1 {
    foo = "asd";
}
class A2 {}
class B1 {}
class B2 {}
const api = {
    a: { A1, A2 },
    b: { B1, B2 }
};
const x: InstanceType<typeof api["a"]["A1"]> = new api.a.A1();
console.log(x.foo); // asd

绝对不需要X的类型声明-实例化时会推断出它。因此,以下一种清洁得多,并且可以正常工作:

const x = new api.a.A1();