Back to questions
Middle
2
Приходилось ли использовать дискриминантные юнионы и type guards? Какие встроенные type guards знаешь?
Companies where asked
UserGate
Answer from AI
sobes.tech AI
Дискриминантные юнионы (discriminated unions) и type guards — мощные инструменты TypeScript для работы с объединениями типов, позволяющие безопасно определять конкретный тип в объединении.
Дискриминантные юнионы — это объединения типов, где каждый тип имеет общий литеральный ключ (например, поле type), по которому можно однозначно определить конкретный тип.
Type guards — функции или конструкции, которые проверяют тип переменной во время выполнения и сужают тип для компилятора.
Встроенные type guards в TypeScript:
typeof— для примитивов (string,number,boolean)instanceof— для проверки принадлежности к классуin— проверяет наличие свойства в объекте
Пример дискриминантного юниона и type guard:
interface Square {
kind: 'square';
size: number;
}
interface Circle {
kind: 'circle';
radius: number;
}
type Shape = Square | Circle;
function area(shape: Shape): number {
switch (shape.kind) {
case 'square':
return shape.size * shape.size;
case 'circle':
return Math.PI * shape.radius ** 2;
}
}
Здесь kind — дискриминант, а switch выступает как type guard.
Использование встроенных type guards:
function isString(value: unknown): value is string {
return typeof value === 'string';
}
if (isString(someVar)) {
// здесь someVar тип string
}