В чём разница между Omit, Exclude и Extract в TypeScript?
Utility Types
`Omit` работает с ключами объекта, а `Exclude` и `Extract` — с членами union-типа.
interface User { id: number; name: string; password: string }
type Public = Omit<User, 'password'>; // { id: number; name: string }
type Status = 'idle' | 'loading' | 'error' | 'success';
type Active = Exclude<Status, 'idle'>; // 'loading' | 'error' | 'success'
type Failed = Extract<Status, 'error' | 'idle'>; // 'idle' | 'error'Различия
Omit<T, K>убирает ключиKиз объектаT.Exclude<U, X>убирает из объединенияUвсё, что присваиваетсяX.Extract<U, X>оставляет только то, что присваиваетсяX.
Когда что
Скрыть поле из публичной модели — Omit. Отфильтровать варианты union — Exclude и Extract. Связанный NonNullable<T> убирает null и undefined.
Коротко для собеседования
Omit убирает поля объекта, Exclude убирает варианты union, Extract оставляет их.