PassFront
  1. PassFront
  2. База знаний
  3. Основы TypeScript

Как переопределять типы в TypeScript?

Основы TypeScript

«Переопределить» тип в TypeScript можно несколькими способами — в зависимости от того, свой это тип или чужой.

Свой тип: создать новый на основе старого

interface User { id: number; name: string; email?: string }

type UserDto = Omit<User, 'id'> & { id: string };   // поменять тип поля
type RequiredUser = Required<User>;                  // сделать поля обязательными

Удобный хелпер для замены полей:

type Override<T, U> = Omit<T, keyof U> & U;
type ApiUser = Override<User, { id: string }>;

Чужой тип: расширить объявление

// дополнить интерфейс из библиотеки
declare module 'express' {
  interface Request {
    user?: { id: string };
  }
}

Интерфейсы с одинаковым именем сливаются (declaration merging), поэтому можно добавить поля в чужой интерфейс.

Глобальные типы

declare global {
  interface Window { analytics: Analytics }
}

Коротко для собеседования

Свои типы меняют через Omit/Pick/Partial и пересечения (Override), чужие — через declaration merging в declare module или declare global.

Подробнее: TypeScript — Declaration Merging

Другие вопросы раздела