在 TypeScript 中按值类型排除对象键
Exclude object keys by their value type in TypeScript
我想将一个对象类型映射到一个子类型,该子类型只包含其值属于特定类型的键。
例如,ExtractNumeric<T>
,其中
ExtractNumeric<{ str: string, num: number }>
应该等同于类型:{ num: number }
我已经试过了,但它不起作用:
type ExtractNumeric<T> = { [k in keyof T]: T[k] extends number ? T[k] : never }
此代码段引发类型错误:
let obj: ExtractNumeric<{ str: string, num: number }> = { num: 1 }
因为尽管 str
键期望值为 never
,但编译器会抱怨它不存在。
在评论中链接aticle,但简而言之:
type SubType<Base, Condition> = Pick<Base, {
[Key in keyof Base]: Base[Key] extends Condition ? Key : never
}[keyof Base]>;
type ExtractNumeric<T> = SubType<T, number>
我想将一个对象类型映射到一个子类型,该子类型只包含其值属于特定类型的键。
例如,ExtractNumeric<T>
,其中
ExtractNumeric<{ str: string, num: number }>
应该等同于类型:{ num: number }
我已经试过了,但它不起作用:
type ExtractNumeric<T> = { [k in keyof T]: T[k] extends number ? T[k] : never }
此代码段引发类型错误:
let obj: ExtractNumeric<{ str: string, num: number }> = { num: 1 }
因为尽管 str
键期望值为 never
,但编译器会抱怨它不存在。
在评论中链接aticle,但简而言之:
type SubType<Base, Condition> = Pick<Base, {
[Key in keyof Base]: Base[Key] extends Condition ? Key : never
}[keyof Base]>;
type ExtractNumeric<T> = SubType<T, number>