Sobes.tech
Назад к вопросам
Middle
4

TypeScript: что такое Omit и Pick? В чём разница между union и intersection типами? Что произойдёт если передать intersection тип в Omit?

Компании, где спрашивали
Evrone

Ответ от нейросети

sobes.tech AI

В TypeScript:

  • Pick<T, K> создаёт новый тип, выбирая из типа T только свойства с ключами K.
  • Omit<T, K> создаёт новый тип, исключая из типа T свойства с ключами K.

Пример:

interface User {
  id: number;
  name: string;
  age: number;
}

type UserName = Pick<User, 'name'>; // { name: string }
type UserWithoutAge = Omit<User, 'age'>; // { id: number; name: string; }

Разница между union и intersection типами:

  • Union (|) — значение может быть одним из нескольких типов. Например, string | number — это либо строка, либо число.
  • Intersection (&) — значение должно удовлетворять всем типам одновременно. Например, A & B — объект, который имеет свойства и A, и B.

Если передать intersection тип в Omit, то Omit применится ко всему пересечению, то есть будут исключены свойства из каждого типа в пересечении. Но на практике это может привести к неожиданным результатам, так как пересечение требует наличия всех свойств, а Omit их убирает, что может сделать тип несовместимым.

Пример:

type A = { a: number; b: string; };
type B = { b: string; c: boolean; };

type AB = A & B; // { a: number; b: string; c: boolean; }

type Result = Omit<AB, 'b'>; // { a: number; c: boolean; }

Здесь свойство 'b' будет удалено из результата, так что Result — это тип с 'a' и 'c'.