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 — локальная установка не требуется.
Все уроки этого курса
- Сужение типов с помощью typeof, равенства и истинности
- in, instanceof и дискриминированные объединения
- Полнота проверок с never (введение)