Sobes.tech
Middle

Görev 7: Alien ve Human türleri vardır ve bunlar Person türünde birleştirilmiştir. checkAlien fonksiyonunu yazın, bu fonksiyon verilen Person'un uzaylı olup olmadığını kontrol eder. isAlien özelliğine erişimdeki TypeScript hatasını düzeltin.

sobes.tech yapay zeka

AI'dan gelen yanıt

В 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);
}

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