在TypeScript中,接口(Interface)和类(Class)都可以用来定义类型,但它们的使用场景和目的有所不同。选择使用接口而非类来定义类型通常更合适的情况包括:
类:类不仅定义了类型,还包含了实现(如方法、构造函数等)。如果你需要实例化对象或实现一些逻辑,类会更合适。
示例:
interface User {
name: string;
age: number;
}
const user: User = {
name: "Alice",
age: 25
};
在这个例子中,User
接口只定义了对象的形状,没有实现任何逻辑。
extends
)来扩展其他接口,这使得接口在定义复杂类型时非常灵活。你可以将多个接口组合在一起,形成一个更复杂的类型。类:类也可以通过继承来扩展,但类的继承通常用于实现继承关系和行为复用。
示例:
interface Person {
name: string;
}
interface Employee extends Person {
employeeId: number;
}
const employee: Employee = {
name: "Bob",
employeeId: 123
};
类:虽然类也可以实现多态性,但接口在这方面更为灵活,因为一个类只能继承自一个父类,但可以实现多个接口。
示例:
interface Drivable {
drive(): void;
}
interface Flyable {
fly(): void;
}
class FlyingCar implements Drivable, Flyable {
drive() {
console.log("Driving...");
}
fly() {
console.log("Flying...");
}
}
类:如果你需要扩展或修改库的行为,类可能更合适。
示例:
interface JQuery {
text(): string;
text(content: string): JQuery;
}
const $element: JQuery = $("div");
类:类通常不用于描述函数类型。
示例:
interface SearchFunc {
(source: string, subString: string): boolean;
}
const mySearch: SearchFunc = function(source: string, subString: string) {
return source.search(subString) > -1;
};
在实际开发中,接口和类经常结合使用,接口用于定义类型,类用于实现具体的行为。