feat: add mapped types in ts section

This commit is contained in:
2025-05-26 09:44:03 +03:00
parent 1a18557ec6
commit 26053787a5
6 changed files with 41 additions and 5 deletions

View File

@@ -0,0 +1,116 @@
---
sidebar_position: 7
---
# Type guards
**Type Guards (защитники типов)** в TypeScript — это механизм, который позволяет сужать тип переменной внутри блока кода на основе проверки условий. Это помогает TypeScript лучше понимать, с каким типом данных он работает, и обеспечивает безопасность типов.
## Зачем нужны Type Guards?
- **Сужение типов:** TypeScript может автоматически определять тип переменной внутри блока кода после проверки.
- **Безопасность типов:** Type Guards помогают избежать ошибок, связанных с неправильным использованием типов.
- **Улучшение читаемости:** Код становится более понятным, так как явно указываются условия для работы с разными типами.
## Основные виды Type Guards
### 1. `typeof`
Проверяет тип примитивных значений (string, number, boolean, symbol, undefined, object, function).
```ts
function printValue(value: string | number) {
if (typeof value === "string") {
console.log(value.toUpperCase()); // Тип value: string
} else {
console.log(value.toFixed(2)); // Тип value: number
}
}
```
### 2. `instanceof`
Проверяет, является ли объект экземпляром определенного класса.
```ts
class Dog {
bark() {
console.log("Woof!");
}
}
class Cat {
meow() {
console.log("Meow!");
}
}
function makeSound(animal: Dog | Cat) {
if (animal instanceof Dog) {
animal.bark(); // Тип animal: Dog
} else {
animal.meow(); // Тип animal: Cat
}
}
```
### 3. Проверка на `null` или `undefined`
Позволяет исключить `null` или `undefined` из типа.
```ts
function printLength(value: string | null) {
if (value !== null) {
console.log(value.length); // Тип value: string
}
}
```
### 4. Пользовательские Type Guards
Функции, которые возвращают **`boolean`** и помогают TypeScript сузить тип.
```ts
interface Bird {
fly(): void;
}
interface Fish {
swim(): void;
}
function isFish(pet: Bird | Fish): pet is Fish {
return (pet as Fish).swim !== undefined;
}
function move(pet: Bird | Fish) {
if (isFish(pet)) {
pet.swim(); // Тип pet: Fish
} else {
pet.fly(); // Тип pet: Bird
}
}
```
Обратите внимание на синтаксис **`pet is Fish`**. Это указывает TypeScript, что если функция возвращает **`true`**, то **`pet`** имеет тип **`Fish`**.
### 5. Проверка свойств объекта
Позволяет сузить тип на основе наличия определенного свойства.
```ts
interface Car {
drive(): void;
}
interface Boat {
sail(): void;
}
function move(vehicle: Car | Boat) {
if ("drive" in vehicle) {
vehicle.drive(); // Тип vehicle: Car
} else {
vehicle.sail(); // Тип vehicle: Boat
}
}
```
## Итог
**Type Guards** — это мощный инструмент TypeScript для работы с типами. Они позволяют:
- Сужать типы на основе условий.
- Повышать безопасность кода.
- Делать код более читаемым и выразительным.
Используйте **Type Guards**, чтобы TypeScript лучше понимал ваши намерения и помогал избегать ошибок.
🚀 **_Источник: DeepSeek_**