这个代码片段是否通过对Typescript说谎来工作?



我正在阅读官方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
}
编辑:

类型断言还允许您对所讨论的对象自由地做一些事情,例如,如果使用复杂类型,使用ins编写所有类型安全的内容可能会有点麻烦,特别是当整个目的是断言它实际上是某个给定类型

相关内容

  • 没有找到相关文章