Что такое Type Guard?
Продвинутые темы
Type Guard (защитник типа) — это выражение или функция в TypeScript, которое сужает тип переменной внутри блока кода, позволяя компилятору понять её конкретный тип.
Зачем нужен
При union-типах нужно «сузить» тип, чтобы безопасно работать с конкретным вариантом.
Встроенные type guards
function print(value: string | number) {
if (typeof value === 'string') {
value.toUpperCase(); // здесь value: string
} else {
value.toFixed(2); // здесь value: number
}
}- typeof — для примитивов.
- instanceof — для классов.
- in — проверка наличия свойства.
- Проверка на
null/undefined, литеральные сравнения.
Пользовательский type guard
Функция с возвращаемым типом value is Type:
interface Cat { meow(): void }
interface Dog { bark(): void }
function isCat(pet: Cat | Dog): pet is Cat {
return 'meow' in pet;
}
if (isCat(pet)) pet.meow(); // pet сужен до CatDiscriminated unions
Общее поле-дискриминатор (type/kind) позволяет сужать по switch.
Коротко для собеседования
Type Guard сужает union-тип до конкретного: встроенные (typeof, instanceof, in, проверки на null) и пользовательские функции с предикатом value is Type. Позволяет компилятору безопасно работать с нужным вариантом типа.