Утилітний тип exclude у TypeScript
Exclude — це утиліта типу в TypeScript, яка дозволяє виключати конкретні підтипи з типу union. Вона створює новий union, видаляючи члени, які можуть бути присвоєні іншому типу.
Синтаксис
ts
Exclude<T, U>T— оригінальний тип union.U— підтипи (або union підтипів), які потрібно видалити зT.
Таким чином, Exclude<T, U> видаляє з T всі підтипи, які можуть бути присвоєні U, залишаючи лише несумісні.
Коли використовувати Exclude?
- Очищення типів: видалення
nullтаundefined, щоб уникнути зайвих перевірок. - Фільтрація необов'язкових полів: коли потрібно зберегти лише певні варіанти в типі union.
- Робота з даними API: виключення небажаних значень з можливих відповідей сервера.
- Оптимізація типів: зменшення кількості можливих варіантів для зручності використання.
Приклади
Приклад 1. Виключення типів з union
ts
type Mixed = string | number | boolean;
// Видалити числа та булеві значення
type OnlyStrings = Exclude<Mixed, number | boolean>;
// OnlyStrings = string- У нас є тип union
Mixed = string | number | boolean. Exclude<Mixed, number | boolean>залишає лише ті типи вMixed, які не можуть бути присвоєніnumber | boolean.- Результат —
string.
Приклад 2. Виключення null та undefined
ts
type APIResponse = "success" | "error" | null | undefined;
// Видалити null та undefined, залишивши лише дійсні статуси
type ValidResponse = Exclude<APIResponse, null | undefined>;
function handleResponse(status: ValidResponse) {
console.log(`Received response: ${status}`);
}
handleResponse("success"); // ✅ Ok
handleResponse("error"); // ✅ Ok
handleResponse(null); // ❌ Помилка компіляції- Якщо у нас є тип, який включає
nullтаundefined, використовуючиExclude, ми можемо їх видалити. - Аналогічний підхід — використання утиліти NonNullable.
Відмінність від Extract
| Утиліта | Опис |
|---|---|
Exclude<T, U> | Виключає всі підтипи з T, які сумісні з U |
Extract<T, U> | Залишає лише підтипи з T, які сумісні з U |
ts
type Mixed = string | number | boolean;
type OnlyNumbersOrBooleans = Extract<Mixed, number | boolean>;
// number | boolean
type OnlyStrings = Exclude<Mixed, number | boolean>;
// stringПідсумок
- Exclude спрощує управління складними типами union, дозволяючи виключати непотрібні варіанти.
- Допомагає "очистити" тип, якщо потрібно працювати лише з конкретною групою підтипів.
- Поєднується з утилітами Extract, NonNullable тощо для тоншого налаштування та фільтрації типів.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.