接口
用于约束类、对象、函数的契约(标准)。
契约(标准)的形式:
- 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在继承上,接口和类型别名的区别
- 子接口不能重写父接口的成员
- 交叉类型会把多个相同成员的类型交叉