PickByType
Challenge
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; }
Solution
Zur Lösung dieses Problems erstellen wir einen Mapped Type, bei dem wir schon bei der Iteration über die Eigenschaften / Schlüssel auf den Wert des Attributes prüfen, und die Kombination aus Eigenschaft + Wert nur dann im neuen Typ aufnehmen, wenn der Wert nicht U entspricht.
type PickByType<T, U> = {
[key in keyof T as T[key] extends U ? key : never]: T[key];
};