类类型接口未强制执行函数参数类型

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 是一个布尔值,我会得到一个编译器错误,因为ComputerMousepowerOn() 实现需要匹配接口。

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

【讨论】:

以上是关于类类型接口未强制执行函数参数类型的主要内容,如果未能解决你的问题,请参考以下文章

java类的构造函数的参数为接口类型,如何传值?

defrecord 构造函数中未强制执行类型提示

未捕获的类型错误:无法在“窗口”上执行“requestAnimationFrame”:作为参数 1 提供的回调不是函数

如何强制函数参数为相同类型并且不允许使用类型构造函数匹配给定类型?

laravel中的构造函数依赖注入理解

Flutter 6种构造函数详解