Skip to content

接口

用于约束类、对象、函数的契约(标准)。

契约(标准)的形式:

  • api 文档,弱标准
  • 代码约束,强标准

定义一个接口

格式:interface 接口名称 { 接口成员: 类型 }

ts
interface User {
  name: string
  age: number
  sayHello: () => void // 该字段的函数没有参数也没有返回值
  sayHello(): void // 另一种写法
  filter(item:number) => boolean // 该字段的函数参数需要是number类型,且返回布尔值
}

接口与类型别名的区别

  • 接口与类型别名很相似,最大区别在于接口可以约束类
  • 接口和类型别名一样,不会出现在编译结果中

接口如何约束函数

{}中没有具体的类型名称时,{}就只是一个定界符,表示一个具体的约束内容,而不是一个对象。

tsx
interface Condition {
  (n: number): boolean
}

这种写法,在类型别名中同样通用。

tsx
type Condition = {
	(n: number): boolean
}

接口的继承

使用 extends 关键字实现继承。

tsx
interface A {
  a1: string
}

interface B extends A{
  b1: number
}

接口也可以实现多继承。

tsx
interface A {
	a1: string,
}

interface B {
  b1: number
}

interface C extends A, B{
  // 接口不能重写父级的接口成员
  // a1: number
  c1: boolean
}

通过类型别名可以达到类似的效果,通过&实现,它叫做交叉类型

tsx
type A = {
  a1: string
}

type B = {
  b1: number
}

type C = {
  c1: boolean
} & A & B

在继承上,接口和类型别名的区别

  • 子接口不能重写父接口的成员
  • 交叉类型会把多个相同成员的类型交叉