Sobes.tech
Middle

Առաջադրանք 7: Կան Alien և Human տիպեր, որոնք միավորվում են Person տիպում: Գրեք checkAlien ֆունկցիան, որը ստուգում է, արդյոք փոխանցված Person-ը արտասահմանցի է: Թողեք TypeScript-ի սխալը, երբ մուտք եք գործում isAlien հատկությանը։

sobes.tech AI

Պատասխան AI-ից

В TypeScript, если у вас есть объединённый тип Person, который может быть либо Alien, либо Human, и только у Alien есть свойство isAlien, то при обращении к isAlien напрямую у Person будет ошибка, так как у Human такого свойства нет.

Чтобы исправить ошибку, нужно использовать type guard — проверку, которая позволит компилятору понять, что объект действительно является Alien.

Пример:

type Alien = { isAlien: true; name: string };
type Human = { name: string };
type Person = Alien | Human;

function checkAlien(person: Person): boolean {
  return 'isAlien' in person && person.isAlien === true;
}

Здесь мы используем оператор in для проверки наличия свойства isAlien. Это позволяет TypeScript сузить тип и избежать ошибки при обращении к person.isAlien.

Альтернативно, можно написать пользовательский type guard:

type Alien = { isAlien: true; name: string };
type Human = { name: string };
type Person = Alien | Human;

function isAlien(person: Person): person is Alien {
  return (person as Alien).isAlien === true;
}

function checkAlien(person: Person): boolean {
  return isAlien(person);
}

Такой подход улучшает читаемость и повторное использование проверки.