在Typescript的类型注释中使用'is'关键字的目的是什么

时间:2019-09-24 02:02:15

标签: javascript typescript

我正在阅读一本打字稿书,看到了一些类似这样的代码:

class Product {
   ...
}

function Test(args): args is Product {
   return args instanceof Product;
}

但是函数的返回类型不是布尔值吗?因此我们可以将普通函数编写为:

function Test(args): boolean {
   return args instanceof Product;
}

将返回类型注释用作args is XXX而不是简单的boolean有什么好处?

1 个答案:

答案 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
}