代码示例:
interface Animal {name: string; } interface Cat extends Animal { meow(); } function isCat(a: Animal): a is Cat { return a.name === 'kitty'; } console.log(isCat({name:'dog'}))
上面代码不会报错。但是如果把 function 改为箭头函数就会报错,点此运行:
const isCat: (a: Animal)=> a is Cat = (a) => { return a.name === 'kitty'; }
报错信息为
Type '(a: Animal) => boolean' is not assignable to type '(a: Animal) => a is Cat'. Signature '(a: Animal): boolean' must be a type predicate.
根据 TypeScript issues 里面的某人的解释,这是故意设计成这样的,因为我们最好不要把某个返回 bool 的函数赋值给 type predicate,应该在声明的时候就写好,所以正确的写法是这样的:
const isCat = (a:Animal): a is Cat => { return a.name === 'kitty'; }
好吧,这个解释看起来合理。
饥人谷一直致力于培养有灵魂的编程者,打造专业有爱的国内前端技术圈子。如造梦师一般帮助近千名不甘寂寞的追梦人把编程梦变为现实,他们以饥人谷为起点,足迹遍布包括facebook、阿里巴巴、百度、网易、京东、今日头条、大众美团、饿了么、ofo在内的国内外大小企业。 了解培训课程:加微信 xiedaimala03,官网:https://jirengu.com