Ответ
type User = {
id: number;
name: string;
};
// Переопределяем тип User, добавляя новое поле
type ExtendedUser = User & {
email: string;
};
const user: ExtendedUser = {
id: 1,
name: 'John',
email: 'john@example.com'
};
В TypeScript можно переопределять типы с помощью:
- Объединения (
|) - Пересечения (
&) - Утилит типов (
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 }, айдишник сгинул в небытие!
Удобно, когда надо из чего-то большого слепить что-то поменьше, не переписывая всё руками. В общем, инструментов — вагон и маленькая тележка, главное — не запутаться и не выебать себе мозг этими пересечениями-объединениями.