您的位置:

深入理解 TypeScript 接口继承

一、TS 接口继承写法

在 TypeScript 中,接口是一种非常重要的概念,可以用来描述对象的形状或类的结构。接口继承是指一个接口可以继承另一个接口或多个接口的成员。

接口继承语法如下:

interface ChildInterface extends ParentInterface {
  // 子接口 extends 父接口的成员
  ...
}

举个例子:

interface Animal {
  age: number;
  eat(): void;
}

interface Person extends Animal {
  name: string;
  sayHi(): void;
}

上述代码中,Person 接口继承了 Animal 接口。

二、TS type 继承

除了接口继承,TypeScript 中还支持通过 type 关键字进行类型的继承。

type 关键字定义的类型别名可以继承其他类型、联合类型或交叉类型。

type A = { a: number };
type B = A & { b: number };

上述代码中,B 类型继承了 A 类型,是 A 类型与带有 b 属性的对象的交叉类型。

三、TS 接口继承类

在 TypeScript 中,接口还可以继承类,这个类可以是一个普通类,也可以是一个抽象类。

class Animal {
  age: number;
  eat(): void {}
}

interface Person extends Animal {
  name: string;
  sayHi(): void;
}

上述代码中,Person 接口继承了 Animal 类,可以理解为实现了 Animal 类的所有成员。

四、TS 定义接口

在 TypeScript 中,接口的定义可以为对象和函数定义。下面给出对象的定义:

interface Foo {
  propA: number;
  propB: string;
}

上述代码中,Foo 接口定义了对象的形状,对象必须包含 propA 属性和 propB 属性。

五、TS 接口继承多个接口

接口之间也可以多重继承,即一个接口可以同时继承多个接口,语法如下:

interface ChildInterface extends ParentInterface1, ParentInterface2 {
  // 子接口同时 extends 多个父接口的成员
  ...
}

举个例子:

interface Person {
  name: string;
  sayHi(): void;
}

interface WorkMan {
  company: string;
  work(): void;
}

interface Employee extends Person, WorkMan {
  dept: string;
  work(): void;
}

上述代码中,Employee 接口同时继承了 Person 和 WorkMan 接口,实现了所有继承接口的成员。

六、TS 类型继承

TypeScript 还支持类型的继承,类型继承可以实现对多个类型的复合。语法如下:

type ChildType = ParentType1 & ParentType2 & ...

举个例子:

type PersonType = {
  name: string;
  age: number;
}

type InfoType = {
  sex: string;
  address: string;
}

type EmployeeType = PersonType & InfoType;

上述代码中,EmployeeType 类型继承了 PersonType 和 InfoType 的成员,是 PersonType 和 InfoType 的交叉类型。

七、接口继承了 object 类吗

在 TypeScript 中,如果一个接口不显式继承自其它接口,那么它默认会继承自 object 类型,object 是 TypeScript 中表示非特定类型的类型,即表示所有对象类型的基础。

interface Foo {
  propA: number;
  propB: string;
}

const foo: Foo = {}; // TypeScript 报错:缺少属性 propA 和 propB。

上述代码中,Foo 接口没有继承其它接口,因此默认继承自 object 类型。

八、TS 继承抽象类

除了可以继承类和接口,TypeScript 还支持继承抽象类。

抽象类是用来定义标准的类,它不能被实例化,只能用来被子类继承。抽象类可以包含抽象方法,这些方法只有定义,没有实现。

abstract class Animal {
  abstract eat(): void;
}

interface Person extends Animal {
  name: string;
}

上述代码中,Person 接口继承了 Animal 抽象类,实现了 eat 方法。

九、TS 接口是什么

TypeScript 中的接口是用来定义对象和函数的规范,接口定义了对象和函数应该拥有的属性和方法。一个对象或函数如果符合接口的规范,就可以被认为是实现了这个接口。

十、TS 继承多个接口

在 TypeScript 中,接口允许继承多个接口,通过这种方式可以实现接口的复用和拓展。当一个接口继承了多个接口时,它就会包含父接口的所有成员。

举个例子:

interface Person {
  name: string;
  sayHi(): void;
}

interface WorkMan {
  company: string;
  work(): void;
}

interface Employee extends Person, WorkMan {
  dept: string;
  work(): void;
}

上述代码中,Employee 接口继承了 Person 和 WorkMan 接口,实现了所有继承接口的成员。