繁体   English   中英

如何正确键入 object 和 typescript 与属性 object

[英]How can i correctly type an object with typescript with condition on property object

我从 Typescript 开始,并尝试在if块中使用 object。 if我测试条件 - 如果存在一个属性并且如果是这种情况,我可以将它用于if块但 TS 编译器似乎不理解

type Fish = {
    swim: () => void
}

type Bird = {
    fly: () => void
}

const test = function (pet: Fish | Bird) {
    if ((pet as Fish).swim) {
        pet.swim()
    }
}

游乐场链接

支票

if ((pet as Fish).swim)

对 TS 推断pet的类型没有任何帮助,因为每条 Fish 都已经swim过。 使用in来检查属性是否存在,并在pet上执行此操作,以便将pet缩小到Fish并且可以对其进行swim调用:

const test = function (pet: Fish | Bird) {
    if ('swim' in pet) {
        pet.swim();
    }
};

我认为您应该使用 typescript https://www.typescriptlang.org/docs/handbook/advanced-types.html的 Typeguard 功能

如果你这样做,它应该可以在你的罐子里工作:

function isFish(pet: Fish | Bird): pet is Fish {
  return (pet as Fish).swim !== undefined
}
const test = function (pet: Fish | Bird) {
    if (isFish(pet)) {
        pet.swim()
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM