接口的继承和实现是 TypeScript 类型系统的重要组成部分。它们可以帮助开发者定义更加复杂和具体的类型,提高代码的可读性、可维护性和可扩展性。合理使用这些特性可以帮助构建出更加健壮和灵活的 TypeScript 应用程序。
接口可以通过使用 extends 关键字继承一个或多个其他接口。这样可以创建出更加复杂和具体的接口定义。
interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
let myDog: Dog = {
name: 'Buddy',
breed: 'Labrador'
};
在这个例子中,Dog 接口继承了 Animal 接口,所以 Dog 类型的对象必须同时拥有 name 和 breed 属性。 接口继承还可以是多重继承:
interface Person {
name: string;
}
interface Employee {
jobTitle: string;
}
interface Manager extends Person, Employee {
department: string;
}
在这个例子中,Manager 接口同时继承了 Person 和 Employee 接口,因此 Manager 类型的对象必须拥有 name、jobTitle 和 department 属性。
除了继承,接口还可以被类(Class)实现。当一个类实现一个接口时,它必须遵守接口定义的所有属性和方法。
interface Animal {
name: string;
makeSound(): void;
}
class Dog implements Animal {
name: string;
breed: string;
constructor(name: string, breed: string) {
this.name = name;
this.breed = breed;
}
makeSound() {
console.log('Woof!');
}
}
在这个例子中,Dog 类实现了 Animal 接口,因此必须定义 name 属性和 makeSound() 方法。 接口实现还可以是多重实现:
interface Printable {
print(): void;
}
interface Saveable {
save(): void;
}
class Document implements Printable, Saveable {
print() {
console.log('Printing document...');
}
save() {
console.log('Saving document...');
}
}
在这个例子中,Document 类实现了 Printable 和 Saveable 两个接口,因此必须定义 print() 和 save() 方法。