typescript - 在涉及声明合并的重载函数中键入“this”参数?
问题描述
我收到以下代码的类型错误:
我不太清楚为什么,错误说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;
};
解决方案
正如错误消息应该说的那样,您的匿名函数Cash | "foo"
的返回类型不能分配给 的任何一个调用签名的返回类型Cash.prototype.text
。根据这个答案,您需要(1)使用类型断言或(2)定义一个命名的重载函数(具有两个调用签名和一个实现签名),然后将该函数分配给Cash.prototype.text
.
假设您已noImplicitThis
禁用,如果您不注释this
参数,则默认为any
. 无论好坏,any
与任何事物的联合都是any
,因此匿名函数any
的返回类型与 的两个调用签名的返回类型兼容Cash.prototype.text
。这就是为什么在这种情况下您不会收到错误的原因。我强烈建议使用noImplicitThis
(实际上是全部strict
)来避免这种意外。
没有重载时我无法重现缺少错误Cash.prototype.text
:当我保留一个调用签名并注释掉另一个时,我仍然得到错误。
推荐阅读
- python - 在 Python 中设置轴范围
- java - 使用调度的执行器生成一个新的随机数,然后将该数字作为 Java 中的新时间间隔传递
- c# - 当 WPF “ResourceDictionary Warning 9 Resource not found”没有告诉我资源键时,如何追踪它?
- python - 尝试制作乒乓球运动员时,按向上键会出现错误:一个位置参数,但给出了两个
- python - Django-Rest 框架:如何从下拉列表中排除当前登录的用户
- python - Tkinter第一次点击第一个函数,第二次点击第二个函数
- javascript - 在 react js 中转换为有效的 json 格式
- microsoft-graph-api - Microsoft Graph API - 从非管理员处收集数据
- flutter - Dart 中的循环队列
- delphi-5 - 删除 Delphi 5 应用程序所需的提升权限