我正在阅读一本打字稿书,看到了一些类似这样的代码:
class Product {
...
}
function Test(args): args is Product {
return args instanceof Product;
}
但是函数的返回类型不是布尔值吗?因此我们可以将普通函数编写为:
function Test(args): boolean {
return args instanceof Product;
}
将返回类型注释用作args is XXX
而不是简单的boolean
有什么好处?
答案 0 :(得分:3)
您正在使用user-defined type guard进行描述。
文档中的示例说明了如何通过缩小联合类型来使用它们。
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
如果定义了Fish
,则代码的任何条件分支会将类型范围缩小到swim
。
if (isFish(pet)) {
pet.swim(); // compiler knows that `pet` is of the `Fish` type
}