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

Що таке typeguard у TypeScript

TypeGuard — це механізм у TypeScript, який допомагає звужувати тип змінної в межах блоку коду. Це дозволяє TypeScript точно визначати тип змінної на основі умов, роблячи код безпечнішим і дозволяючи компілятору краще перевіряти типи.

TypeGuard використовується для перевірки типу змінної та звуження її типу в конкретному контексті. Це особливо корисно, коли змінна може бути одним з кількох типів, і вам потрібно виконати дії, специфічні для певного типу.

Принцип роботи TypeGuard

TypeScript надає кілька способів реалізації TypeGuard, включаючи:

  1. Користувацькі функції TypeGuard.
  2. Оператори перевірки типу такі як typeof та instanceof.
  3. Користувацькі перевірки типу за допомогою is.

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

  1. Приклад з typeof:

Оператор typeof дозволяє перевіряти примітивні типи, такі як string, number, boolean та інші. У випадку TypeGuard це дозволяє звужувати тип змінної в блоці коду.

typescript
function printLength(value: string | number) { if (typeof value === "string") { console.log(value.length); // Працює, оскільки value точно є string } else { console.log(value.toFixed(2)); // Працює, оскільки value точно є number } } printLength("Hello"); // Вивід: 5 printLength(42); // Вивід: 42.00

У цьому прикладі оператор typeof дозволяє TypeScript зрозуміти, що в блоці if змінна value є рядком, а в блоці else — числом.

  1. Приклад з instanceof:

Оператор instanceof використовується для перевірки типів об'єктів, наприклад, класів. Це дозволяє точно визначити тип об'єкта, якщо він є екземпляром певного класу.

typescript
class Dog { bark() { console.log("Woof!"); } } class Cat { meow() { console.log("Meow!"); } } function speak(animal: Dog | Cat) { if (animal instanceof Dog) { animal.bark(); // Доступ до методу bark, оскільки animal є Dog } else { animal.meow(); // Доступ до методу meow, оскільки animal є Cat } } const dog = new Dog(); const cat = new Cat(); speak(dog); // Вивід: Woof! speak(cat); // Вивід: Meow!
  1. Користувацькі функції TypeGuard

Ви можете створити власні функції для перевірки типу та використання TypeGuard з ключовим словом is.

typescript
type Dog = { bark: () => void }; type Cat = { meow: () => void }; function isDog(animal: Dog | Cat): animal is Dog { return (animal as Dog).bark !== undefined; } function speak(animal: Dog | Cat) { if (isDog(animal)) { animal.bark(); // animal тепер точно типу `Dog` } else { animal.meow(); // animal тепер точно типу `Cat` } } const dog: Dog = { bark: () => console.log("Woof!") }; const cat: Cat = { meow: () => console.log("Meow!") }; speak(dog); // Вивід: Woof! speak(cat); // Вивід: Meow!

Чому використовувати TypeGuard?

  • Безпека типів: TypeGuard допомагає уникати помилок, пов'язаних з неправильним використанням змінних, оскільки TypeScript точно розуміє, який тип змінної використовується в кожному блоці коду.
  • Покращена читабельність коду: Використання TypeGuard робить код більш зрозумілим і передбачуваним, оскільки він явно вказує, які типи даних обробляються в кожному блоці.
  • Краще розуміння коду для IDE: TypeScript та IDE (наприклад, Visual Studio Code) можуть використовувати TypeGuard для покращення підказок, автозаповнення та рефакторингу, що прискорює розробку та покращує роботу з кодом.

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

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

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

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