类类型接口未强制执行函数参数类型
Posted
技术标签:
【中文标题】类类型接口未强制执行函数参数类型【英文标题】:Class type interface is not enforcing function argument types 【发布时间】:2016-08-13 11:17:37 【问题描述】:我有一个实现接口的简单类:
interface IDevice
electronic: boolean;
ergonomic: boolean;
powerOn(param1:string): boolean;
class ComputerMouse implements IDevice
electronic = true;
ergonomic = false;
powerOn(param1)
return true;
var mouse = new ComputerMouse();
mouse.powerOn(true);
当param1
在界面中输入为字符串时,我可以将布尔值传递给powerOn()
。这不应该导致类型错误吗?
如果我指定param1
是一个布尔值,我会得到一个编译器错误,因为ComputerMouse
的powerOn()
实现需要匹配接口。
class ComputerMouse implements IDevice
electronic = true;
ergonomic = false;
powerOn(param1:boolean)
return true;
这是有意为之还是我遗漏了什么?
【问题讨论】:
如果您将类中函数的签名更改为:powerOn(param1:string)
,您将收到mouse.powerOn(true)
的错误,但我不确定为什么没有它它不会抱怨
是的,我想弄清楚为什么没有它它不会抱怨。好像不应该这样
@NitzanTomer 似乎是因为 TypeScript 不支持实现属性的上下文类型。查看下面的链接
【参考方案1】:
这似乎是因为实现的属性不是上下文类型的: https://github.com/Microsoft/TypeScript/issues/1373
有一个修复方法: https://github.com/Microsoft/TypeScript/pull/6118
【讨论】:
以上是关于类类型接口未强制执行函数参数类型的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的类型错误:无法在“窗口”上执行“requestAnimationFrame”:作为参数 1 提供的回调不是函数