在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;预期
答案 0 :(得分:2)
这里有一些问题:
1)在声明返回类型时使用this
时,它被用作polymorphic this type而不是对类实例的引用。
2)The docs on this matter明确指出:
谓词采用的形式parameterName是Type,其中parameterName 必须是当前函数签名中参数的名称。
如果您使用this.parameterName
,那么它不是“来自当前功能签名的参数”
您可以争辩说他们可以添加它但是:
3)类型防护是检查类型而不是变量的函数 由于类型本身不是类的一部分,因此类型保护函数也不会成为类的一部分。