Middle
Үй тапшырма 7: Alien жана Human түрлөрү бар, алар Person түрүндө бириктирилген. checkAlien функциясын жаз, ал берилген Person тышкы дүйнөдөн экенин текшерет. isAlien мүлкүнө кирүүдө пайда болгон TypeScript катасын оңдо.
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);
}
Такой подход улучшает читаемость и повторное использование проверки.