PassFront
  1. PassFront
  2. База знаний
  3. Type Narrowing и Guards

Во что компилируется type guard в TypeScript?

Type Narrowing и Guards

Type guard при компиляции превращается в обычную JavaScript-проверку — типы стираются, остаётся только условие.

Пример

function isString(value: unknown): value is string {
  return typeof value === 'string';
}

if (isString(input)) {
  input.toUpperCase();
}

После компиляции:

function isString(value) {
  return typeof value === 'string';
}
if (isString(input)) {
  input.toUpperCase();
}

Что это значит

  • value is string существует только для компилятора: он сужает тип внутри if.
  • Сама проверка работает в рантайме, поэтому её корректность — ответственность разработчика: если функция вернёт true для числа, TypeScript не заметит ошибку.
  • Встроенные защитники (typeof, instanceof, in) — это обычный JavaScript.

Коротко для собеседования

Type guard компилируется в обычную функцию или условие; аннотация x is T удаляется и влияет только на сужение типов при проверке.

Подробнее: TypeScript Handbook — Narrowing

Другие вопросы раздела