泛型接口内的Typescript函数来推断参数类型



假设我有一个接受泛型的接口:

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类型。例如,如果我们使用User interface, 'value'参数将是'string | number | boolean'

操场上联系

我们可以通过映射对象键使ObjectKey成为所有可能组合的并类型

type ObjectKey<T extends {}> = {
[K in keyof T]: {
key: K, 
doSomethingWithKey: (value: T[K]) => void
}
}[keyof T]
interface User {
name: string,
age: number,
archived: boolean
}
const nameKey: ObjectKey<User> = {
key: 'age', 
doSomethingWithKey: (value) => console.log(value)
}

游乐场

相关内容

最新更新