【发布时间】:2021-11-18 09:14:21
【问题描述】:
假设我有
clients/
index.ts
client1.ts
client2.ts
myApp.ts
// client1.ts
export default class Client1 {}
// client2.ts
export default class Client2 {}
// clients/index.ts
import Client1 from './client1';
import Client2 from './client2';
export { client1, client2 };
现在,我想使用 myApp 中的所有客户端并将类型设置为基于此,即
// myApp.ts
import * as clients from './clients';
type Clients = {
[key in keyof typeof clients]: clients[key];
}
const allClients: Clients = {
client1: new clients.Client1(),
client2: new clients.Client2(),
}
上面的代码无效,clients[key]; 抛出一个关于Cannot use namespace 'clients' as a type. 的错误,但我基本上希望能够导入所有客户端,并将该对象用作我所有客户端的类型定义。这可能吗?
【问题讨论】:
-
客户端是否有任何从同一个接口/类扩展的东西?还是它们完全不同?
-
这个问题有多少错别字?从表面上看,您需要
(typeof clients)[key]而不是clients[key],但是当范围内没有任何名称为client1或client2时,如何导出{client1, client2}?然后你的allClients持有类实例,但类型暗示构造函数。你也许可以做this,但我肯定更喜欢minimal reproducible example,唯一的问题是你要问的问题。就像this,也许……这能回答你的问题吗? -
@kks21199 他们完全不同
-
如果您创建一个包含客户端之间常用方法的接口,您可以将它们存储在列表中并访问它们。这可能会有所帮助,stackoverflow.com/a/23106997/3126835 这仍然需要您先手动将客户端添加到列表中。
标签: javascript typescript