为什么我要使用谓词作为返回类型而不是布尔值?

时间:2018-09-11 17:53:56

标签: angular typescript

在阅读本文时,我才发现有关用户定义的类型保护的信息:https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards

在本文的一个示例中,他们使用pet is Fish作为方法返回类型,这是一个谓词。

我发现,除了此返回类型外,还可以使用boolean。那么parameter is Type返回类型仅仅是语法糖,还是有特定用途?

1 个答案:

答案 0 :(得分:3)

如果返回boolean,该函数将是一个简单的函数,而不是类型保护。 pet is Fish语法向编译器发出信号,该函数将影响参数的类型。

例如:

class Fish { f: boolean }
class Dog { d: boolean; }

declare let x: Fish | Dog;
declare function isFish(p: Fish | Dog): boolean
declare function isFishGuard(p: Fish | Dog): p is Fish;

if (isFishGuard(x)) {
    x.f // x is Fish
}

if (isFish(x)) {
    x.f // error x is still Fish|Dog
}

Playground link