Приведи пример переопредиления типа

Ответ

type User = {
  id: number;
  name: string;
};

// Переопределяем тип User, добавляя новое поле
type ExtendedUser = User & {
  email: string;
};

const user: ExtendedUser = {
  id: 1,
  name: 'John',
  email: 'john@example.com'
};

В TypeScript можно переопределять типы с помощью:

  1. Объединения (|)
  2. Пересечения (&)
  3. Утилит типов (Partial, Omit и др.)

Пример с Omit:

type SimplifiedUser = Omit<User, 'id'>;
// { name: string }

Ответ 18+ 🔞

Да ты посмотри, какой придурок этот TypeScript, блядь! Сидишь такой, пишешь себе типы, всё норм, а потом — бац! — надо добавить ещё одно поле. Ну, как будто заранее не догадался, что email-то понадобится, ёпта!

Вот смотри, был у тебя тип User, простой, как три копейки:

type User = {
  id: number;
  name: string;
};

Чувак с айдишником и именем. Красота.

А потом приходит озарение: "А почту-то, сука, забыл!". И начинается эта цирковая ебля с переопределением.

Самый наглый и простой способ — это взять и скрестить своего User с чем-нибудь ещё, как кроликов, блядь. С помощью этого амперсанда &, который пересечение делает.

type ExtendedUser = User & {
  email: string;
};

Получается этакий франкенштейн: всё, что было в User, плюс новая почта. И создаёшь объект, уже заточенный под этот расширенный тип:

const user: ExtendedUser = {
  id: 1,
  name: 'John',
  email: 'john@example.com' // Без этого поля теперь — пиздец, ошибка!
};

Вообще, способов наколдовать себе новый тип — овердохуища. Можно, например, объединение (|) делать, но это уже для других, более извращённых сценариев.

А ещё есть целая куча встроенных утилит, которые делают всю грязную работу за тебя. Вот, например, Omit — эта штука просто выкидывает указанные поля нахуй из типа.

type SimplifiedUser = Omit<User, 'id'>;
// Получится { name: string }, айдишник сгинул в небытие!

Удобно, когда надо из чего-то большого слепить что-то поменьше, не переписывая всё руками. В общем, инструментов — вагон и маленькая тележка, главное — не запутаться и не выебать себе мозг этими пересечениями-объединениями.