Typescript中 extends 和 implements 有什么区别?什么时候用哪个?
首先,这些东西不是TS特有的,其他静态语言中早就出现了。比如C#, 它对应了两个概念,一个是接口interface, 一个是类型class, 接口是定义行为的,而类型是对事务的抽象。接口不包括具体的实现,类型则是实现了所有内容。所以要对应使用接口或类型,我们就有了extends 和 implements的关键字。Typescript也遵循这些,但也有不同,我们来具体看一下。
Implements
Implements主要用于实现接口,因为接口不包括具体实现,它就像定义了一个契约,例如下面这个Point的接口:
它定义了Point的两个属性,和一个计算两点间距离的方法。所有实现该接口的类型,都必须包括接口所定义的成员。接口只能被实现(implements),实现意味着原来接口没有具体的内容,现在被你全部实现,比如那个distance方法,你在实现中需要具体给出计算逻辑,
而接口不可以被类型extends, 否则会报错。接口可以被另外一个接口extends,因为他们都是在定义接口的形状,但这不是我们讨论的范围,暂时忽略。如果一个类要extends接口,则会报错:
Extends
Extends 主要用于类型间的继承关系。一般子类型需要扩展父类型的时候使用,如下:
Manager类继承了Person的所有成员及其实现。Manager 是 Person的子类。
这里也可以使用Implements, (C#中是不行的,类型不允许被实现,TS中可以),但这样的话Person中定义的所有东西,你都必须亲自实现一遍。否则报错!
实现完所有成员后,错误消失。
总结:
Extends:该类从父级获取所有这些方法和属性,因此您不必实现。
Implements:类型必须自己实现方法和属性。