Как реализовать Deep-варианты утилитарных типов (`DeepPartial`, `DeepReadonly`)?
УглублённыйУтилитарные типыПродвинутые типы
type DeepPartial<T> = T extends object
? { [P in keyof T]?: DeepPartial<T[P]> }
: T;
type DeepReadonly<T> = T extends object
? { readonly [P in keyof T]: DeepReadonly<T[P]> }
: T;
type DeepRequired<T> = T extends object
? { [P in keyof T]-?: DeepRequired<T[P]> }
: T;
- Рекурсивные mapped types: применяются к каждому вложенному уровню
- Остановка рекурсии на не-объектных типах
- Полезно для: deep merge, immutable state, конфигурационные объекты