Ответ
Type Guard в TypeScript - это способ сужения типа переменной внутри блока кода. Основные синтаксисы:
- typeof для примитивов:
if (typeof value === 'string') {
// value теперь string
}
- instanceof для классов:
if (error instanceof Error) {
// error теперь тип Error
}
- Пользовательские type guards (функции с предикатом):
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
if (isFish(pet)) {
pet.swim(); // TypeScript знает, что pet - Fish
}
- Проверка свойств (in operator):
if ('swim' in animal) {
// animal имеет свойство swim
}
Type Guards особенно полезны при работе с union типами, помогая TypeScript корректно определить тип в runtime.