Skip to content

interface 接口

简介

interface可以看作是对象的模版,写法和对象类型类似:

typescript
interface Person {
  name: string,
  age: number,
  address?: string,
}

接口的继承

继承接口(interface)

interface的一大特点是可以继承,和类的继承类似:

typescript
interface Person {
  name: string,
  age: number,
}

interface Student extends Person {
  grade: number,
}

如此,Student接口就继承了Person接口的所有属性,无需重复定义。

如果子接口某个属性和父接口的属性重名,那么子接口的属性会覆盖父接口的属性(两者类型必须相同)。

继承类型别名(type)

类型别名也可以继承,和接口的继承类似:

typescript
type Person = {
  name: string,
  age: number,
}

interface Student extends Person  {
  grade: number,
}

继承类(class)

接口也可以继承类,但是只会继承类的实例属性和方法,不会继承类的静态属性和方法:

typescript
class Person {
  name: string;
  age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

interface Student extends Person {
  grade: number;
}

接口的合并

同名接口可以多次声明,会自动合并:

typescript
interface Person {
  name: string,
}

interface Person {
  age: number,
}

const person: Person = {
  name: 'Tom',
  age: 18,
}

接口合并时,同名属性的数据类型必须相同(如果是函数,会发生重载)。