0Pricing
TypeScript Academy · Урок

Защитники типов

Безопасно работайте с типами unknown и any с помощью защитников типов

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

Введение в проверки типов

Проверки типов

Добро пожаловать на следующий урок! На этом уроке Вы узнаете о проверках типов — мощной возможности TypeScript, которая позволяет уточнять типы во время выполнения. Проверки типов помогают обеспечить типобезопасность кода и избежать ошибок. Давайте начнём!

Защитники типов — иллюстрация 1

Что такое проверки типов?

Что такое проверки типов?

Проверка типа — это функция или конструкция, определяющая тип переменной во время выполнения. Она позволяет 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, чтобы уточнять типы во время выполнения и обеспечивать типобезопасность. Проверки типов необходимы для работы со сложными типами объединений и создания надёжного кода без ошибок. На следующем уроке мы рассмотрим отображаемые типы более подробно. Давайте продолжим писать код!

Защитники типов — иллюстрация 10

Часто задаваемые вопросы

Урок «Защитники типов» бесплатный?

Да — полный текст урока «Защитники типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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 — локальная установка не требуется.

Все уроки этого курса

  1. Обобщения
  2. Псевдонимы типов и интерфейсы
  3. Вспомогательные типы
  4. Защитники типов
← Назад к TypeScript Academy