Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: TypeScript, runtime type checking, type guards, discriminated unions

Как организуются runtime-проверки в TypeScript?

Вопрос проверяет понимание того, как TypeScript обрабатывает проверки типов во время выполнения программы, а не только на этапе компиляции.

Короткий ответ

TypeScript не предоставляет встроенных runtime-проверок, так как его система типов работает только на этапе компиляции. Для проверок во время выполнения используются пользовательские type guards, discriminated unions или библиотеки вроде zod и io-ts. Type guards — это функции, возвращающие boolean и использующие ключевое слово 'is' для сужения типа.

Длинный ответ

Как TypeScript обрабатывает типы во время выполнения?

TypeScript — это надстройка над JavaScript, которая добавляет статическую типизацию. Однако после компиляции в JavaScript вся информация о типах удаляется. Это означает, что TypeScript не предоставляет встроенных механизмов для проверки типов во время выполнения программы. Разработчикам приходится реализовывать такие проверки самостоятельно.

Пользовательские type guards

Самый распространенный способ — это создание функций, которые проверяют структуру данных и возвращают логическое значение с указанием типа. Такие функции называются type guards. Они используют ключевое слово is в возвращаемом типе.

interface Cat {
  meow(): void;
}
interface Dog {
  bark(): void;
}

function isCat(pet: Cat | Dog): pet is Cat {
  return (pet as Cat).meow !== undefined;
}

function handlePet(pet: Cat | Dog) {
  if (isCat(pet)) {
    pet.meow(); // TypeScript знает, что pet — Cat
  } else {
    pet.bark(); // TypeScript знает, что pet — Dog
  }
}

Discriminated unions

Другой подход — использование discriminated unions (различающихся объединений). Это когда каждый объект в объединении имеет общее свойство (дискриминант) с уникальным литеральным типом. TypeScript может сузить тип на основе значения этого свойства.

type Shape =
  | { kind: 'circle'; radius: number }
  | { kind: 'square'; side: number };

function area(shape: Shape): number {
  switch (shape.kind) {
    case 'circle':
      return Math.PI * shape.radius ** 2;
    case 'square':
      return shape.side ** 2;
  }
}

Библиотеки для runtime-валидации

Для более сложных сценариев существуют библиотеки, такие как zod или io-ts. Они позволяют определять схемы данных и проверять их во время выполнения, автоматически выводя типы TypeScript.

import { z } from 'zod';

const UserSchema = z.object({
  name: z.string(),
  age: z.number().positive(),
});

type User = z.infer<typeof UserSchema>;

const data = JSON.parse('{"name":"Alice","age":30}');
const user = UserSchema.parse(data); // выбросит ошибку, если данные невалидны

Вывод

Runtime-проверки в TypeScript необходимы для валидации данных, поступающих из внешних источников (API, пользовательский ввод). Используйте type guards для простых случаев, discriminated unions для работы с объединениями типов, и библиотеки вроде zod для сложных схем. Это повышает надежность приложения и предотвращает ошибки, связанные с некорректными данными.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • TypeScript

    TypeScript

Ключевые слова

#TypeScript

#runtime type checking

#type guards

#discriminated unions

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию