在 TypeScript 中,接口(Interfaces)是一种强大的方式来定义对象的结构,它们用于类型检查和确保对象符合特定的结构。接口也可以用于类,实现类似多态的特性。以下是 TypeScript 中接口的语法和多态的快速入门指南。
TS快速入门-接口-语法
定义接口
接口用于定义对象的结构,可以包括属性、函数、可选属性等:
interface Person {
name: string;
age: number;
speak?: () => void; // 可选属性
}
实现接口
类可以通过 implements
关键字实现一个或多个接口:
class Student implements Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
speak(): void {
console.log(`My name is ${this.name} and I am studying TypeScript.`);
}
}
接口继承
接口可以继承其他接口,类似于类继承:
interface Animal {
name: string;
makeSound(): void;
}
interface Dog extends Animal {
breed: string;
}
class Labrador implements Dog {
name: string;
breed: string;
constructor(name: string, breed: string) {
this.name = name;
this.breed = breed;
}
makeSound(): void {
console.log('Bark!');
}
}
多态
多态允许同一个接口在不同的上下文中有不同的实现:
interface Animal {
makeSound(): void;
}
class Dog implements Animal {
makeSound(): void {
console.log('Woof!');
}
}
class Cat implements Animal {
makeSound(): void {
console.log('Meow!');
}
}
function makeAnimalSound(animal: Animal): void {
animal.makeSound(); // 多态的使用,实际调用的方法取决于 animal 的类型
}
let dog = new Dog();
let cat = new Cat();
makeAnimalSound(dog); // 输出: Woof!
makeAnimalSound(cat); // 输出: Meow!
示例代码
以下是一个使用 TypeScript 接口的示例,展示了接口的基本语法和多态的使用:
// 定义接口
interface Greeting {
greet(): void;
}
// 实现接口的类
class Person implements Greeting {
name: string;
constructor(name: string) {
this.name = name;
}
greet(): void {
console.log(`Hello, my name is ${this.name}!`);
}
}
// 另一个实现接口的类
class Robot implements Greeting {
model: string;
constructor(model: string) {
this.model = model;
}
greet(): void {
console.log(`Hello, I am ${this.model}!`);
}
}
// 使用接口实现多态的函数
function introduce(greeting: Greeting): void {
greeting.greet(); // 调用实现 Greeting 接口的 greet 方法
}
// 创建 Person 和 Robot 的实例
let person = new Person('Alice');
let robot = new Robot('Bender');
// 通过接口引用调用多态函数
introduce(person); // 输出: Hello, my name is Alice!
introduce(robot); // 输出: Hello, I am Bender!
TypeScript 中接口的语法和多态的使用。接口为定义对象和类的结构提供了一种灵活的方式,而多态则允许函数对不同类型的对象执行不同的操作,这使得代码更加通用和可扩展。