📅  最后修改于: 2023-12-03 15:20:43.621000             🧑  作者: Mango
在 TypeScript 中,接口(Interface)是用于定义对象的类型的一种方式。它们提供了一种结构化的方式来定义对象的形状,包括属性、方法以及任何其他组成部分。使用接口可以提高代码的可读性和可维护性,以及进行类型检查和静态分析。
接口可以使用 interface
关键字来定义。以下是一个接口的示例:
interface Person {
name: string;
age: number;
sayHello(): void;
}
上面的代码定义了一个名为 Person
的接口,它包含了 name
和 age
两个属性,以及一个 sayHello
的方法。属性和方法既可以有类型声明,也可以有默认值。
在 TypeScript 中,我们可以使用接口来定义对象的类型。接口可以用作函数参数、返回值、类的成员等等。以下是一些使用接口的示例:
let person: Person = {
name: 'John',
age: 25,
sayHello: () => {
console.log('Hello!');
}
};
上面的代码创建了一个 person
对象,该对象符合 Person
接口的定义。
function greet(person: Person): void {
console.log(`Hello, ${person.name}!`);
}
let john = {
name: 'John',
age: 25,
sayHello: () => {
console.log('Hello!');
}
};
greet(john);
上面的代码中,函数 greet
接受一个 Person
类型的参数。
class Employee implements Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
sayHello(): void {
console.log('Hello!');
}
}
上面的代码定义了一个 Employee
类,它实现了 Person
接口。
接口可以相互继承,实现接口的类或对象需要实现继承的所有接口的属性和方法。以下是一个接口继承的示例:
interface Employee extends Person {
profession: string;
}
let john: Employee = {
name: 'John',
age: 25,
profession: 'Developer',
sayHello: () => {
console.log('Hello!');
}
};
上面的代码定义了一个 Employee
接口,它继承了 Person
接口,并添加了一个 profession
属性。
接口的属性可以加上 ?
符号,表示该属性是可选的。以下是一个使用可选属性的示例:
interface Person {
name: string;
age?: number;
sayHello(): void;
}
上面的代码中,age
属性是可选的。
接口的属性可以加上 readonly
关键字,表示该属性是只读的,不能被修改。以下是一个使用只读属性的示例:
interface Point {
readonly x: number;
readonly y: number;
}
let p: Point = { x: 10, y: 20 };
p.x = 5; // 错误,无法修改只读属性
通过使用 TypeScript 中的接口,可以有效地定义对象的类型结构,并提供代码的类型检查和静态分析。接口还可以相互继承、添加可选属性和只读属性,以及应用于函数参数和类的成员等场景。接口是 TypeScript 中非常重要和实用的特性之一。