Middle
Потребявали ли сте дискриминантни юниони и type guards? Кои вградени type guards знаете?
sobes.tech AI
Отговор от AI
Дискриминирани съюзи (discriminated unions) и guards за типове (type guards) са мощни инструменти в TypeScript за работа с съюзни типове, които позволяват безопасно определяне на конкретен тип в съюза.
Дискриминирани съюзи са съюзи от типове, където всеки тип има общ буквено-литерален ключ (например полето type), чрез който може да се определи точно конкретният тип.
Guards за типове са функции или конструкции, които проверяват типа на променлива по време на изпълнение и ограничават типа за компилатора.
Вградени guards в TypeScript:
typeof— за примитивни типове (string,number,boolean)instanceof— за проверка на принадлежност към класin— за проверка дали свойство съществува в обект
Пример за дискриминиран съюз и guard за тип:
interface Kvadrat {
kind: 'square';
size: number;
}
interface Кръг {
kind: 'circle';
radius: number;
}
type Форма = Kvadrat | Кръг;
function площ(форма: Форма): number {
switch (форма.kind) {
case 'square':
return форма.size * форма.size;
case 'circle':
return Math.PI * форма.radius ** 2;
}
}
Тук kind е дискриминатор, а switch действа като guard за тип.
Използване на вградени guards за тип:
function еString(стойност: unknown): стойност е string {
return typeof стойност === 'string';
}
if (еString(нещо)) {
// тук, `нещо` е от тип string
}