假设我有一个接受泛型的接口:
interface ObjectKey<T extends {}>{
key: keyof T
doSomethingWithKey: (value: any) => void
}
像这样使用它:
interface User {
name: string,
age: number,
archived: boolean
}
const nameKey: ObjectKey<User> = {
key: 'name',
doSomethingWithKey: (value) => console.log(value) // I want to infer value type here
}
如上所述,我想推断'value'参数类型,如下所示:
interface ObjectKey<T extends {}>{
key: keyof T
doSomethingWithKey: (value: T[key]) => void
}
我怎样才能做到呢?
我试过这样的方法:
interface ObjectKey<T extends {}>{
key: keyof T
doSomethingWithKey: (value: { [Property in keyof T]: T[Property] }[keyof T]) => void
}
但是它返回所有可用类型的T。例如,如果我们使用用户界面,'value'参数将是'string|数|布尔值'
Playground链接
1条答案
按热度按时间eufgjt7s1#
我们可以通过Map对象键使
ObjectKey
成为所有可能组合的联合类型Playground