Перейти к основному содержимому
Об авторе
Проекты
Знания
Знания/TypeScript/deep-utility-types

Как реализовать 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, конфигурационные объекты
  • Главная
  • Об авторе
  • Проекты
  • Знания
Логотип nKolmykov