Skip to main content
Практика завдань

Як працюють keyof та typeof у TypeScript

keyof та typeof — це два оператори в TypeScript, які використовуються для роботи з типами даних та покращення типізації. Вони дозволяють працювати з типами об'єктів і змінних, а також витягувати ключі та типи з існуючих значень.

Оператор keyof

Оператор keyof дозволяє витягувати всі ключі об'єкта як строковий об'єднання. Це корисно, коли потрібно працювати з об'єктами та перевіряти доступні ключі, або коли потрібно типізувати змінні, які повинні бути одним з ключів об'єкта.

Приклад використання keyof

Припустимо, у нас є об'єкт з деякими властивостями, і ми хочемо отримати тип усіх ключів цього об'єкта.

typescript
type Person = { name: string; age: number; email: string; }; type PersonKeys = keyof Person; // "name" | "age" | "email"

У цьому прикладі keyof Person створює об'єднаний тип рядків, що містить усі ключі з типу Person. У цьому випадку PersonKeys буде типом "name" | "age" | "email", що означає, що кожен ключ об'єкта Person буде доступний як тип. Тепер ми можемо використовувати PersonKeys для оголошення змінних, які можуть бути лише одним з цих ключів:

typescript
let key: PersonKeys; key = "name"; // Дійсно key = "age"; // Дійсно key = "address"; // Помилка: Тип '"address"' не може бути призначений типу '"name" | "age" | "email"'

Оператор typeof

Оператор typeof дозволяє витягувати тип змінної або значення. Це корисно, коли потрібно знати тип змінної без явного його зазначення та використовувати цей тип в інших частинах коду.

Приклад використання typeof

typescript
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

typescript
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 для витягування типів з змінних, щоб підвищити безпеку типів та гнучкість коду.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.

Дочитали статтю?
Практика завдань