我正在阅读官方Typescript文档,在类型谓词部分看到了这个例子:
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
我想我理解类型谓词,但不理解pet as Fish1
部分。在这个代码片段中,程序员不只是为了让谓词工作而使用typescript吗?在我看来,返回谓词的isFish
函数告诉typescript"这是fish";这样它就不会抛出TypeError
,因为所谓的Fish
不能保证有swim
方法。这种理解正确吗?)
这是真的,这不是一个真正干净的解决方案,我想这是为了区分前面提到的in
操作符的例子。也可能是为了说明,你可以做任何你想做的事情来断言所问的对象是特定类型的,因为这就是类型谓词的全部目的。
这个函数更简洁的实现应该使用in
操作符,而不是类型断言。
function isFish(pet: Fish | Bird): pet is Fish {
if ('swim' in pet)
// possibly do more stuff to check its really a Fish, pet is already narrowed to type Fish in this case
return true
else
return false
}
编辑:
类型断言还允许您对所讨论的对象自由地做一些事情,例如,如果使用复杂类型,使用in
s编写所有类型安全的内容可能会有点麻烦,特别是当整个目的是断言它实际上是某个给定类型