TS中的接口
# TS中的接口
用于约束:类、对象、函数 的标准。
类似于 Type-C 、USB、Lighting 的数据接口都是要满足一些标准的。
标准的形式:
- 文档 -> 弱标准,有可能不遵循文档协议,没有提示,只能在运行后才能知道。
- 代码约束,强标准。
# TS 中如何使用接口
接口约束对象
接口和类型别名一样不会出现在编译结果中
区别就是接口可以约束类,
interface Student { name: string, age: number } let stu: Student = { name: 'zhang san', age: 18 }
约束函数
// <-----!1---------> interface callback { (n: number): boolean } // <-----!2---------> type callback = { (n: number): boolean } function sum(source: number[], callback: callback): number { return source.filter(callback).reduce((prev, item) => prev + item, 0) } console.log(sum([1, 2, 3, 4, 5], (n) => n % 2 == 0));
两种约束方式都可以
# 接口继承
可以通过接口间的继承实现多种组合(已经区分开类型别名)
子接口中不能覆盖父接口的成员。
interface Father {
name: string,
}
interface Son extends Father {
age: number
}
let obj: Son = {
name: 'zhang san',
age: 18
}
接口支持多继承
interface Father {
name: string,
}
interface Son extends Father {
age: number
}
interface Other extends Son, Father {
// age:string, 无法定义,子接口无法覆盖父接口成员。
trick: boolean
}
let obj: Other = {
name: 'zhang san',
age: 18,
trick: true
}
# 交叉类型
可以通过 &
进行类型别名的交叉。
type Father = {
name: string
}
type Son = {
age: number
}
type Other = {
//age:string , 可以通过,但是会将两个成员进行交叉变成, number & string
trick: boolean
} & Son & Father
let obj: Other = {
name: 'zhang san',
age: 18,
trick: true
}
区别:
- 子接口不能覆盖父接口的成员
- 交叉类型会把相同成员的类型进行交叉。
# readonly (修饰符)
修饰一些类型和属性。修饰的目标是只读的。
interface Student {
readonly stu_id: string,
name: string,
age: number
}
let stu: Student = {
name: 'zhang san',
age: 18,
stu_id: '12138'
}