挑战 From T, pick a set of properties whose type are assignable to U. For Example type OnlyBoolean = PickByType< { name: string; count: number; isReadonly: boolean; isEnable: boolean; }, boolean >; // { isReadonly: boolean; isEnable: boolean; } 解答 这道题可以通过把映射类型和条件类型结合起来来解决。我们可以通过遍历 T 的所有属性,然后检查属性的类型是否可以赋值给 U 来实现。 type PickByType<T, U> = { [K in keyof T as T[K] extends U ? K : never]: T[K]; };