网站搜索

javascript - 在 TypeScript 的类型注解中使用 'is' 关键字的目的是什么


我正在读一本 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

你正在描述使用用户定义的类型保护。

文档中的示例说明了通过缩小联合类型,这些是如何有用的。

function isFish(pet: Fish | Bird): pet is Fish {
    return (pet as Fish).swim !== undefined;
}

如果定义了 swim,你代码的任何条件分支都会将类型缩小到 Fish。

if (isFish(pet)) {
    pet.swim(); // compiler knows that `pet` is of the `Fish` type
}