Защитники типов
Безопасно работайте с типами unknown и any с помощью защитников типов
«Защитники типов» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Введение в проверки типов
Проверки типов
Добро пожаловать на следующий урок! На этом уроке Вы узнаете о проверках типов — мощной возможности TypeScript, которая позволяет уточнять типы во время выполнения. Проверки типов помогают обеспечить типобезопасность кода и избежать ошибок. Давайте начнём!

Что такое проверки типов?
Что такое проверки типов?
Проверка типа — это функция или конструкция, определяющая тип переменной во время выполнения. Она позволяет TypeScript уточнять тип переменной внутри определённого блока кода.
Пример:
Задача: Напишите функцию, которая использует проверку типа, чтобы определить, является ли значение числом.
function isString(value: unknown): boolean {
return typeof value === "string";
}
function printLength(value: unknown): void {
if (isString(value)) {
console.log(value.length);
// TypeScript knows 'value' is a string here
} else {
console.log("Value is not a string");
}
}
printLength("Hello");
// Output: 5
printLength(42);
// Output: Value is not a string
Использование оператора определения типа для примитивов
Использование typeof для примитивов
Оператор typeof позволяет проверять тип примитивных значений, таких как строки, числа и логические значения.
Пример:
Задача: Используйте typeof, чтобы различать строку и число в функции.
function printValue(value: string | number): void {
if (typeof value === "string") {
console.log(`String value: ${value}`);
} else {
console.log(`Number value: ${value}`);
}
}
printValue("Hello");
// Output: String value: Hello
printValue(42);
// Output: Number value: 42
Использование проверки экземпляра для классов
Использование instanceof для классов
Оператор instanceof проверяет, является ли объект экземпляром определённого класса. Пример:
Задача: Используйте instanceof, чтобы обрабатывать экземпляры разных классов в функции.
class Dog {
bark(): void {
console.log("Woof!");
}
}
class Cat {
meow(): void {
console.log("Meow!");
}
}
function makeSound(animal: Dog | Cat): void {
if (animal instanceof Dog) {
animal.bark();
} else {
animal.meow();
}
}
let dog = new Dog();
let cat = new Cat();
makeSound(dog);
// Output: Woof!
makeSound(cat);
// Output: Meow!
Использование пользовательских проверок типов
Использование пользовательских проверок типов
Вы можете создавать собственные функции проверки типов, используя тип возвращаемого значения value is Type. Пример:
interface Car {
make: string;
model: string;
}
interface Bike {
brand: string;
type: string;
}
function isCar(vehicle: Car | Bike): vehicle is Car {
return (vehicle as Car).make !== undefined;
}
function printVehicle(vehicle: Car | Bike): void {
if (isCar(vehicle)) {
console.log(`Car: ${vehicle.make} ${vehicle.model}`);
} else {
console.log(`Bike: ${vehicle.brand} ${vehicle.type}`);
}
}
let car: Car = { make: "Toyota", model: "Corolla" };
let bike: Bike = { brand: "Yamaha", type: "Sport" };
printVehicle(car);
// Output: Car: Toyota Corolla
printVehicle(bike);
// Output: Bike: Yamaha Sport
Размеченные объединения
Размеченные объединения
Размеченные объединения используют общее свойство, чтобы различать типы. Пример:
interface Circle {
kind: "circle";
radius: number;
}
interface Rectangle {
kind: "rectangle";
width: number;
height: number;
}
type Shape = Circle | Rectangle;
function calculateArea(shape: Shape): number {
if (shape.kind === "circle") {
return Math.PI * shape.radius ** 2;
} else {
return shape.width * shape.height;
}
}
let circle: Circle = { kind: "circle", radius: 5 };
let rectangle: Rectangle = { kind: "rectangle", width: 10, height: 20 };
console.log(calculateArea(circle));
// Output: 78.53981633974483
console.log(calculateArea(rectangle));
// Output: 200
Проверка всех вариантов
Проверка всех вариантов
Проверка всех вариантов гарантирует, что обработаны все возможные случаи размеченного объединения. Пример:
function getShapeInfo(shape: Shape): string {
switch (shape.kind) {
case "circle":
return `Circle with radius ${shape.radius}`;
case "rectangle":
return `Rectangle with dimensions ${shape.width}x${shape.height}`;
default:
// This line ensures all cases are handled
const _exhaustiveCheck: never = shape;
return _exhaustiveCheck;
}
}
Распространённые ошибки
Распространённые ошибки
Вот несколько распространённых ошибок при использовании проверок типов:
- Пропуск некоторых вариантов типа объединения.
- Неиспользование проверки типа во всех ветвях условной логики.
- Неправильное использование
asдля приведения типов без надлежащих проверок.
Совет: Всегда используйте проверки типов, чтобы уточнить типы перед обращением к их свойствам или методам!
Отличная работа!
Отличная работа!
Поздравляем! Вы научились использовать проверки типов в TypeScript, чтобы уточнять типы во время выполнения и обеспечивать типобезопасность. Проверки типов необходимы для работы со сложными типами объединений и создания надёжного кода без ошибок. На следующем уроке мы рассмотрим отображаемые типы более подробно. Давайте продолжим писать код!

Часто задаваемые вопросы
Урок «Защитники типов» бесплатный?
Да — полный текст урока «Защитники типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Защитники типов»?
Безопасно работайте с типами unknown и any с помощью защитников типов Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Защитники типов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Обобщения
- Псевдонимы типов и интерфейсы
- Вспомогательные типы
- Защитники типов