Property does not exist on type
Изучаю Typescript, остановился на теме сужения типов, и один момент мне стал решительно непонятен:
interface Circle {
radius: number
}
interface Square {
sideLength: number
}
type Shape = Circle | Square
function getArea(shape: Shape) {
if (!(typeof shape.radius == 'undefined')) { // Property 'radius' does not exist on type 'Square'.
return Math.PI * shape.radius ** 2 // Property 'radius' does not exist on type 'Square'.
} else {
return 'none';
}
}
Я понимаю что у объекта может не оказаться этого свойства и потому я делаю проверку на undefined значение, но компилятор всё равно ругается хотя код выполняется как надо. Так вот, я хотел бы узнать почему компилятор продолжает ругаться.
Пытался использовать оператор ?? -> if (shape.radius ?? false) {}, но компилятор всё равно ворчит да и 0 в свойстве radius обрабатывается некорректно .
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
Можно как написано в "ветхом завете":
function getArea(shape: Shape) {
if ('radius' in shape) {
console.log(shape.radius);
}
}
По-тээсовски:
function isCircle(s: Shape): s is Circle {
return (<Circle>s).radius !== undefined;
}
function getArea(shape: Shape) {
if (isCircle(shape)) {
console.log(shape.radius);
}
}