Какой опыт написания кастомных Utility Types

«Какой опыт написания кастомных Utility Types» — вопрос из категории TypeScript, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В TypeScript часто пишу Utility Types для типизации сложных структур. Например:

type DeepPartial<T> = {
  [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};

type Nullable<T> = T | null;

type WithId<T> = T & { id: string };

Реальные кейсы использования:

  • DeepPartial для форм редактирования, где нужно делать поля необязательными рекурсивно
  • Nullable для работы с API, где поля могут быть null
  • WithId для унификации типов с обязательным id

Часто комбинирую встроенные Utility Types (Pick, Omit) с кастомными. Важно сохранять читаемость и не усложнять без необходимости.