Во что компилируется 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