在TypeScript中,接口(interface)是一种用于定义对象结构的强大工具。它可以描述对象的属性、方法、索引签名等,提供了一种约定,使得代码更具可读性、可维护性,并能在编译时进行类型检查。以下是接口的主要特性和用法:
1. 属性接口
通过接口可以定义对象的属性及其类型。例如:
interface Person {
name: string;
age: number;
}
let person: Person = {
name: "John",
age: 30
};
这里,Person
接口定义了一个具有 name
和 age
属性的对象类型。
2. 方法接口
接口也可以定义方法的签名。例如:
interface Greeter {
greet(): void;
}
class Greeting implements Greeter {
greet() {
console.log("Hello, world!");
}
}
Greeter
接口定义了一个包含 greet
方法的对象类型,而 Greeting
类实现了这个接口。
3. 可选属性
通过在属性后加上 ?
,可以定义可选属性。例如:
interface Car {
brand: string;
model: string;
year?: number; // 可选属性
}
let myCar: Car = {
brand: "Toyota",
model: "Camry"
};
4. 任意属性
通过索引签名可以定义任意属性。例如:
interface Person {
name: string;
age: number;
[key: string]: any; // 任意属性
}
let user: Person = {
name: "Alice",
age: 25,
job: "Engineer"
};
5. 只读属性
通过 readonly
关键字可以定义只读属性。例如:
interface Point {
readonly x: number;
readonly y: number;
}
let point: Point = { x: 10, y: 20 };
// point.x = 30; // 错误,只读属性无法重新赋值
6. 接口继承
接口可以继承其他接口,实现接口的复用。例如:
interface Shape {
color: string;
}
interface Square extends Shape {
sideLength: number;
}
let square: Square = {
color: "red",
sideLength: 10
};
Square
接口继承了 Shape
接口,拥有了 color
属性。
7. 类接口
接口可以用来描述类的公共部分。例如:
interface Clock {
currentTime: Date;
setTime(d: Date): void;
}
class WallClock implements Clock {
currentTime: Date = new Date();
setTime(newTime: Date) {
this.currentTime = newTime;
}
}
WallClock
类实现了 Clock
接口,必须包含 currentTime
属性和 setTime
方法。