Обов'язковий тип утиліти в TypeScript
Required — це утилітний тип у TypeScript, який робить всі пропси типу обов'язковими, якщо вони були необов'язковими. Під час роботи з об'єктами, де деякі поля можуть не завжди бути заповнені, Required забезпечує сувору вимогу до всіх властивостей на певному етапі розробки або в певному контексті.
Синтаксис
Required<T>T— оригінальний тип, пропси якого ви хочете зробити обов'язковими.
Тип Required перетворює кожну властивість T на обов'язкову, видаляючи знак питання ?. Це особливо корисно, коли після валідації або додаткової обробки даних ви впевнені, що об'єкти повинні містити всі поля.
Коли використовувати Required?
- Якщо вам потрібно гарантувати, що об'єкт має всі пропси.
- Коли потрібно заповнити необов'язкові поля перед відправкою даних.
- У функціях, які вимагають повний об'єкт без undefined.
Приклади використання Required
Перетворення необов'язкових властивостей на обов'язкові:
Припустимо, у нас є інтерфейс User з кількома полями, деякі з яких можуть бути відсутніми:
interface User {
id: number;
name: string;
age?: number;
address?: string;
}
type RequiredUser = Required<User>;
const user: RequiredUser = {
id: 1,
name: "Alice",
age: 30,
address: "Wonderland Ave",
};User— це оригінальний інтерфейс, де поля age та address можуть не бути встановленими.RequiredUserперетворює всі поля (включаючи age та address) на обов'язкові.- Коли ви намагаєтеся пропустити будь-яке з полів age або address, TypeScript викине помилку, вимагаючи їх обов'язкової специфікації.
Використання Required для пост-валідації:
Часто спочатку ви описуєте дані як Partial<User> (або з необов'язковими полями), збираючи їх частинами, а потім після валідації хочете отримати "повну" версію типу, де поля гарантовано існують:
function createUserData(data: Partial<User>): Required<User> {
// ... Виконати валідацію та заповнити відсутні поля
return {
id: data.id ?? 0,
name: data.name ?? "Unknown",
age: data.age ?? 0,
address: data.address ?? "Unknown",
};
}
const partialUser: Partial<User> = { name: "Bob" };
const fullUser: Required<User> = createUserData(partialUser);
// fullUser має всі обов'язкові поля (id, name, age, address)У цій ситуації після виконання перевірок і заповнення значень функція повертає об'єкт типу Required<User>, де всі поля тепер є обов'язковими.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.