我想将对象类型映射为仅包含其值具有特定类型的键的子类型。
例如,类似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
,但编译器会抱怨它不存在。
答案 0 :(得分:1)
在评论中链接了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>