一个接口可以约束类成员有哪些属性以及它们的类型。
interface Human {
// new (name: string): void;
name: string;
eat(): void;
}
// 使用 Asian 实现 Human 接口
class Asian implements Human {
constructor(name: string) {
this.name = name;
}
// private name: string;
name: string;
eat() {}
sleep() {}
}
接口可以像类一样,相互继承,并且一个接口可以继承多个接口。
接口的继承可抽离出可重用的接口。也可以将多个接口合并成一个接口。
interface Human {
// new (name: string): void;
name: string;
eat(): void;
}
// 使用 Asian 实现 Human 接口
class Asian implements Human {
constructor(name: string) {
this.name = name;
}
// private name: string;
name: string;
eat() {}
sleep() {}
}
interface Man extends Human {
run(): void;
}
interface Child {
cry(): void;
}
interface Boy extends Man, Child {}
// 不写属性会报错:类型“{}”缺少类型“Boy”中的以下属性: run, name, eat, cry
const boy: Boy = {
name: '',
run() {},
eat() {},
cry() {}
}
接口处了继承接口之外,还可以继承类。这就相当于接口把类的成员都抽象了出来,只有类的成员结构,没有具体的实现。
接口在抽离类的成员的时候,不仅抽离了公共成员,还抽离了私有成员和受保护成员。
class Auto {
state = 1;
// private state2 = 2;
}
// 接口 AutoInterface 继承 Auto
interface AutoInterface extends Auto {}
// 类 C 实现 AutoInterface 接口
class C implements AutoInterface {
state = 1;
}
// 子类 Bus 继承 Auto 实现 AutoInterface 接口
class Bus extends Auto implements AutoInterface {}