0Pricing
TypeScript Academy · Урок

in, instanceof и дискриминированные объединения

Используйте проверки in и свойств, instanceof для классов и дискриминированные объединения для безопасного ветвления.

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

Введение

Цель: попрактиковаться с тремя мощными защитными проверками: проверкой свойств, проверкой экземпляра для классов и размеченными объединениями для понятного выбора ветви.

Оператор проверки свойств

Проверка свойств сужает тип, проверяя имя свойства во время выполнения. Она особенно удобна для объединений литералов объектов.

type HasLength = { length: number };

function print(v: string | HasLength) {
  if ("length" in v) {
    // v is HasLength
    console.log("len:", v.length);
  } else {
    // v is string
    console.log(v.toUpperCase());
  }
}

print({ length: 3 });
print("ts");

Проверка экземпляра

Проверка экземпляра проверяет прототипы значений, основанных на классах. Она работает, когда конструктор доступен во время выполнения.

class Person {
  constructor(public name: string) {}
}

function hello(x: Person | Date) {
  if (x instanceof Person) {
    console.log("Hi", x.name);
  } else {
    console.log("Year", x.getFullYear());
  }
}

hello(new Person("Ada"));
hello(new Date(2024, 0, 1));

Размеченное объединение

Размеченные объединения используют литеральную метку (например, kind), чтобы выполнять понятный выбор ветви с полным сужением для каждого случая.

type Circle = { kind: "circle"; radius: number };
type Square = { kind: "square"; size: number };

type Shape = Circle | Square;

function area(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius ** 2;
    case "square":
      return s.size * s.size;
  }
}

console.log(area({ kind: "circle", radius: 2 }));
console.log(area({ kind: "square", size: 3 }));

Сочетание защитных проверок

Сочетайте проверки меток с проверкой свойств, чтобы сужать вложенные структуры и обращаться только к безопасным элементам.

type FetchOk = { status: "ok"; data: { length: number } };
type FetchErr = { status: "error"; message: string };

type Result = FetchOk | FetchErr;

function handle(r: Result) {
  if (r.status === "ok" && "length" in r.data) {
    console.log("items:", r.data.length);
  } else {
    console.log("error:", r.message);
  }
}

handle({ status: "ok", data: { length: 5 } });
handle({ status: "error", message: "oops" });

Рекомендации

Рекомендации:

  • Используйте проверку свойств для объединений на основе свойств.
  • Используйте проверку экземпляра с классами.
  • Используйте размеченные объединения для понятного потока управления.

Проверка оператора свойств

Быстрая проверка: какой оператор проверяет свойство во время выполнения и сужает типы?

Итоги

Итоги: проверка свойств проверяет свойства, проверка экземпляра проверяет классы, а размеченные объединения обеспечивают понятный и типобезопасный выбор ветви.

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

Урок «in, instanceof и дискриминированные объединения» бесплатный?

Да — полный текст урока «in, instanceof и дискриминированные объединения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.

Чему я научусь в уроке «in, instanceof и дискриминированные объединения»?

Используйте проверки in и свойств, instanceof для классов и дискриминированные объединения для безопасного ветвления. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.

Сколько времени занимает урок «in, instanceof и дискриминированные объединения»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Сужение типов с помощью typeof, равенства и истинности
  2. in, instanceof и дискриминированные объединения
  3. Полнота проверок с never (введение)
← Назад к TypeScript Academy