Як працюють keyof та typeof у TypeScript
keyof та typeof — це два оператори в TypeScript, які використовуються для роботи з типами даних та покращення типізації. Вони дозволяють працювати з типами об'єктів і змінних, а також витягувати ключі та типи з існуючих значень.
Оператор keyof
Оператор keyof дозволяє витягувати всі ключі об'єкта як строковий об'єднання. Це корисно, коли потрібно працювати з об'єктами та перевіряти доступні ключі, або коли потрібно типізувати змінні, які повинні бути одним з ключів об'єкта.
Приклад використання keyof
Припустимо, у нас є об'єкт з деякими властивостями, і ми хочемо отримати тип усіх ключів цього об'єкта.
type Person = {
name: string;
age: number;
email: string;
};
type PersonKeys = keyof Person; // "name" | "age" | "email"У цьому прикладі keyof Person створює об'єднаний тип рядків, що містить усі ключі з типу Person. У цьому випадку PersonKeys буде типом "name" | "age" | "email", що означає, що кожен ключ об'єкта Person буде доступний як тип. Тепер ми можемо використовувати PersonKeys для оголошення змінних, які можуть бути лише одним з цих ключів:
let key: PersonKeys;
key = "name"; // Дійсно
key = "age"; // Дійсно
key = "address"; // Помилка: Тип '"address"' не може бути призначений типу '"name" | "age" | "email"'Оператор typeof
Оператор typeof дозволяє витягувати тип змінної або значення. Це корисно, коли потрібно знати тип змінної без явного його зазначення та використовувати цей тип в інших частинах коду.
Приклад використання typeof
let person = {
name: "John",
age: 30,
email: "john@example.com"
};
type PersonType = typeof person;
// PersonType буде типом { name: string, age: number, email: string }Комбіноване використання keyof та typeof
keyof та typeof можуть використовуватися разом для створення більш гнучкої типізації та роботи з ключами об'єктів. Це дозволяє отримувати типи з існуючих значень і працювати з їх ключами.
Приклад використання keyof та typeof
const person = {
name: "John",
age: 30,
email: "john@example.com"
};
type PersonKeys = keyof typeof person; // "name" | "age" | "email"
let key: PersonKeys;
key = "name"; // Дійсно
key = "email"; // Дійсно
key = "address"; // Помилка: Тип '"address"' не може бути призначений типу '"name" | "age" | "email"'Тут typeof person витягує тип об'єкта person, а keyof потім витягує всі ключі з цього типу, створюючи об'єднаний тип, яке містить "name" | "age" | "email".
Рекомендація:
Використовуйте keyof для роботи з ключами об'єктів та typeof для витягування типів з змінних, щоб підвищити безпеку типів та гнучкість коду.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.