Как переопределять типы в 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