Как создать `PickByType` и `OmitByType` — фильтрацию свойств по типу значения?
type PickByType<T, U> = {
[K in keyof T as T[K] extends U ? K : never]: T[K]
};
type OmitByType<T, U> = {
[K in keyof T as T[K] extends U ? never : K]: T[K]
};
- Использует key remapping (TS 4.1+):
asв mapped types - Фильтрация через
never: ключ, ремапленный вnever, исключается - Пример:
PickByType<User, string>— только строковые свойства