【发布时间】:2022-12-03 18:07:44
【问题描述】:
实现这种效果的最佳方式是什么(注意:这不是有效的语法 - 将其视为伪代码):
type Config = {
[key: string]: <T> {
params: T,
doSth: (params: T) => void,
},
}
IE。通用 T 类型对于每个键的值(它本身是一个对象)都是不同的,但同时它在不同字段下的该值(对象)中被重用。此外,T 派生自 params 字段。有了它我可以做到:
const config: Config = {
a: {
params: { x: 123 },
doSth: params => {}, // Type of "params" is "{ x: 123 }"
},
b: {
params: { y: 'asd' },
doSth: params => {}, // Type of "params" is "{ y: 'asd' }"
},
}
令我惊讶的是,谷歌搜索并没有产生匹配的结果,尽管它看起来相对有用图案- 有很多类似的问题,但并不完全相同。我尝试应用的一些解决方案都失败了。
【问题讨论】:
-
您正在寻找 existentially qualified generics,也称为“存在类型”,但 TypeScript 不直接支持它们(大多数语言也不支持泛型)。有一些方法可以模拟它们(如this)或解决它们(如@TJCrowder 的回答)。有关详细信息,请参阅链接问题的答案。
标签: typescript