Вопрос проверяет понимание механизма сужения типов в TypeScript и умение использовать различные техники для уточнения типов в runtime.
Type narrowing (сужение типов) — это механизм TypeScript, который позволяет компилятору определить более конкретный тип переменной на основе проверок, выполняемых в runtime. Когда переменная имеет объединённый тип (union type), TypeScript может сузить его до одного из вариантов после определённых условий.
value is Type.// typeof guard
function printId(id: string | number) {
if (typeof id === 'string') {
console.log(id.toUpperCase()); // id: string
} else {
console.log(id.toFixed(2)); // id: number
}
}
// instanceof guard
class Dog { bark() {} }
class Cat { meow() {} }
function makeSound(animal: Dog | Cat) {
if (animal instanceof Dog) {
animal.bark();
} else {
animal.meow();
}
}
// Discriminated union
interface Circle { kind: 'circle'; radius: number; }
interface Square { kind: 'square'; side: number; }
type Shape = Circle | Square;
function area(shape: Shape) {
if (shape.kind === 'circle') {
return Math.PI * shape.radius ** 2;
}
return shape.side ** 2;
}
// Пользовательский type guard
function isString(value: unknown): value is string {
return typeof value === 'string';
}Type narrowing активно используется при работе с API, где данные могут приходить в разных форматах, при обработке событий, в редюсерах Redux, при работе с формами и любыми объединёнными типами. Это делает код безопаснее и уменьшает количество ошибок, связанных с неправильным типом.
Вывод: Type narrowing — ключевой инструмент для безопасной работы с объединёнными типами в TypeScript. Его стоит применять везде, где переменная может принимать несколько типов, чтобы обеспечить корректную обработку каждого варианта и избежать runtime-ошибок.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию