Оператор in
typeof различает примитивы, но с объектами он бессилен: для любого объекта он вернёт "object". Различать объекты разной формы нужно по их содержимому, и один из способов это оператор in, который проверяет наличие свойства.
Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноtypeof различает примитивы, но с объектами он бессилен: для любого объекта он вернёт "object". Различать объекты разной формы нужно по их содержимому, и один из способов это оператор in, который проверяет наличие свойства.
В задании функция обращается к методу, которого может не быть:
Компилятор ругается: «Property 'bark' does not exist on type 'Cat | Dog'». У кота такого метода нет, а функция принимает и кота, и собаку.
TypeScript понимает конструкцию if ("bark" in animal): внутри ветки тип сужается до того варианта, у которого это свойство есть, а в противоположной ветке остаётся другой. Это обычный оператор JavaScript, никакого дополнительного синтаксиса от TypeScript здесь нет, компилятор просто умеет читать такие проверки.
Тесты вызывают speak дважды: для объекта с meow должен вызваться meow(), для объекта с bark вызваться bark().
Перепиши тело speak так, чтобы для кота вызывался его метод, а для собаки свой. Типы Cat и Dog и сигнатуру функции менять не нужно.