在 TypeScript 中,接口(Interface)是一种用于定义对象的结构和类型的语法约定。接口提供了一种方式来描述对象的属性、方法和行为,并且可以在多个类之间共享和重用。
定义接口
在 TypeScript 中,可以使用 interface
关键字来定义接口。
interface Person {
name: string;
age: number;
greet(): void;
}
在上面的例子中,我们定义了一个名为 Person
的接口,它包含了 name
和 age
两个属性,以及一个 greet()
方法。
实现接口
要使类实现一个接口,可以使用 implements
关键字。
class Student implements Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet(): void {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}
在上面的例子中,Student
类实现了 Person
接口,并提供了对应的属性和方法的实现。
类型检查与接口
当一个类实现了一个接口时,TypeScript 会进行类型检查,确保该类包含了接口中定义的所有属性和方法。
代码语言:javascript复制function greetPerson(person: Person): void {
person.greet();
}
const student = new Student("Alice", 20);
greetPerson(student); // 调用函数,传递实现了 Person 接口的对象
在上面的例子中,我们定义了一个 greetPerson
函数,该函数接受一个实现了 Person
接口的对象作为参数,并调用其中的 greet()
方法。通过将 student
对象传递给 greetPerson
函数,我们可以确保该对象满足 Person
接口的要求。
可选属性和只读属性
接口中的属性可以是可选的,即可以存在也可以不存在。
代码语言:javascript复制interface Person {
name: string;
age?: number;
}
在上面的例子中,age
属性是可选的,可以存在也可以不存在。
接口中的属性还可以是只读的,即不可修改。
代码语言:javascript复制interface Person {
readonly name: string;
age: number;
}
在上面的例子中,name
属性是只读的,一旦赋值后就不可修改。
继承接口
接口还可以通过继承其他接口来扩展其属性和方法。
代码语言:javascript复制interface Teacher extends Person {
subject: string;
}
在上面的例子中,Teacher
接口继承了 Person
接口,并添加了一个 subject
属性。
函数类型接口
接口不仅可以用于描述对象的结构,还可以用于描述函数的类型。
代码语言:javascript复制interface AddFunc {
(a: number, b: number): number;
}
在上面的例子中,AddFunc
是一个函数类型的接口,它描述了接受两个参数并返回一个数字的函数类型。