Middle
Ülesanne 7: On tüübid Alien ja Human, mis on ühendatud tüüpi Person. Kirjutage funktsioon checkAlien, mis kontrollib, kas antud Person on välismaalane. Parandage TypeScript'i viga, kui pääsete juurde isAlien omadusele.
sobes.tech AI
Vastus AI-lt
В 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);
}
Такой подход улучшает читаемость и повторное использование проверки.