【问题标题】: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 不支持实现属性的上下文类型。查看下面的链接

标签: class interface typescript


【解决方案1】:

这似乎是因为实现的属性不是上下文类型的: https://github.com/Microsoft/TypeScript/issues/1373

有一个修复方法: https://github.com/Microsoft/TypeScript/pull/6118

【讨论】:

    猜你喜欢
    • 2018-01-19
    • 2021-08-23
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2020-05-12
    • 2018-09-26
    • 1970-01-01
    • 2012-02-27
    相关资源
    最近更新 更多