[英]Typescript function inside generic interface to infer argument type
假设我有一个接受泛型的接口:
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
}
如上所述,我想推断“值”参数类型。 像这样:
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 类型。例如,如果我们使用用户界面,“值”参数将是“字符串 | 编号 | 布尔值'
我们可以通过映射对象键使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)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.