请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么将Radio单独定义为借口后,类的内部还需要单独再定义?

按照老师所讲的内容,针对多个类中可以定义同一个模型形状的方法可以单独定义一个接口来描述形状。

但是在我的测试中,例如:

interface Radio {
  fn(input: number): void;
}

class Car implements Radio {
  fn(input: number) {}
}

class Phone implements Radio {
  fn(input: number) {}
}

本来我以为单独定义好接口后,可以这么写:

interface Radio {
  fn(input: number): void;
}

class Car implements Radio {
  fn(input) {}
}

class Phone implements Radio {
  fn(input) {}
}

但是发现不行,会提示这个 input 参数为 any。
那么我的问题是:既然方法需要写全各种参数及返回值等数据的类型,为什么还要单独给提成一个独立的接口?这样不麻烦吗?

比如像之前的接口定义:

// 接口定义
interface IFn {
  (x: number, y: number): number
}

// 使用
const fn1: IFn = (x,y)=>{}
const fn2: IFn = (x,y)=>{}
const fn3: IFn = (x,y)=>{}

我觉得上面的这个写法是能理解的。但是类的这个写法有点不太明白,给我得感觉就像:

// 接口定义
interface IFn {
  (x: number, y: number): number
}

// 使用
const fn1: IFn = (x: number, y: number):number => { return x + y}

那这样不费事么?

正在回答 回答被采纳积分+3

1回答

张轩 2020-10-11 17:39:07

同学你好 implements 是 OOP 中的一个概念,称之为实现,这个实现你可以理解为一种约束,interface 在这里像是一个规范,implements 就表示,你的类必须要按照我的 interface 来实现,这样做的意义在于工程化开发 比如跨端开发,使用依赖注入模式的话,顶层API依赖各端适配器,那就可以约定好interface,各端分头implements.这样要重构,要加新功能,新端都是非常容易.便于测试,便于开发. 

0 回复 有任何疑惑可以回复我~
  • 老师,这种思想有点像TS中的抽象类啊,就是声明一个抽象类,里面有抽象的属性和方法,然后继承这个抽象类的类必须要有抽象类身上的属性和方法
    回复 有任何疑惑可以回复我~ 2020-10-12 11:45:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信