我正在尝试为一个模块编写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
对象结构(很复杂)作为命名空间的情况下实现?
谢谢。
答案 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();