2595 - PickByType
从 T
中,选择属性,满足其类型是 U
例如:
type OnlyBoolean = PickByType<
{
name: string
count: number
isReadonly: boolean
isEnable: boolean
},
boolean
> // { isReadonly: boolean; isEnable: boolean; }
Solution
type PickByType<T, U> = {
[P in keyof T as T[P] extends U ? P : never]: T[P]
}
P in keyof T as T[P] extends U ? P : never
看出两部分
A as B
A = P in keyof T
和 B = T[P] extends U ? P : never
A
遍历 T
中的属性,B
用来判断属性类型 T[P]
是否是 U
, 若是,则返回 P
, 否则返回 never