TypeScript 2.0方法类型保护?

时间:2016-09-24 01:16:51

标签: typescript typescript2.0

在TypeScript 2.0中,为什么我有一个函数类型的guard:

function hasValue<T>(value: T | undefined): value is T { return value !== undefined; }

但不是方法类型后卫?:

export class Maybe<T> {
    constructor(public value: T | undefined) {}

    hasValue(): this.value is T { return this.value !== undefined; }
}
hasValue()上的

错误:

  

&#39; {&#39;或&#39;;&#39;预期

1 个答案:

答案 0 :(得分:2)

这里有一些问题:

1)在声明返回类型时使用this时,它被用作polymorphic this type而不是对类实例的引用。

2)The docs on this matter明确指出:

  

谓词采用的形式parameterName是Type,其中parameterName   必须是当前函数签名中参数的名称。

如果您使用this.parameterName,那么它不是“来自当前功能签名的参数” 您可以争辩说他们可以添加它但是:

3)类型防护是检查类型而不是变量的函数 由于类型本身不是类的一部分,因此类型保护函数也不会成为类的一部分。