我收到以下代码的类型错误:
我不太清楚为什么,该错误显示为Type 'Cash' is not assignable to type 'string'
。如果我不输入this
参数,它将起作用:
我在这里做错了什么?我正在使用TS v3.1.3。
代码如下:
class Cash {}
interface Cash {
text (): string;
text ( text: string ): this;
}
Cash.prototype.text = function ( text?: string ) {
return text === undefined ? 'foo' : this;
};
答案 0 :(得分:0)
正如错误消息所言,匿名函数Cash | "foo"
的返回类型不能分配给Cash.prototype.text
的两个调用签名的返回类型。根据{{3}},您需要(1)使用类型断言或(2)定义命名的重载函数(具有两个调用签名和一个实现签名),然后将该函数分配给{{1} }。
假设您已禁用Cash.prototype.text
,如果不注释noImplicitThis
参数,则默认为this
。不论好坏,any
与任何事物的并集为any
,因此匿名函数的返回类型显示为any
,并且与两个调用签名的返回类型兼容any
中的。这就是为什么在这种情况下您不会出错的原因。我强烈建议您使用Cash.prototype.text
(实际上是noImplicitThis
的全部)来避免此类意外。
当strict
没有过载时,我无法重现错误:当我保留一个呼叫签名并注释掉另一个呼叫签名时,我仍然会收到错误。