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
}
