[英]How can I correctly type functions in object using Typescript here?
[英]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.