TypeScript 中的 interface
和 type
都可以用来描述对象或函数的类型,但它们之间还是有一些区别的:
- 扩展性:
interface
可以通过声明合并(Declaration Merging)来扩展已有的接口,而type
则不支持。
interface User {
name: string;
}
interface User {
age: number;
}
// User 现在有了 name 和 age 属性
- 表示能力:
type
可以表示更多的类型,如联合类型、交叉类型、元组等,而interface
则不能。
type User = {
name: string;
} | {
age: number;
};
- 实现和继承:
interface
可以被类实现(implements)和继承(extends),而type
则不能。
interface User {
name: string;
}
class MyUser implements User {
name = 'Alice';
}
在实际使用中,如果可能,优先使用 interface
,因为它提供了更好的代码提示和自动补全。当你需要使用联合类型、交叉类型等复杂类型时,再使用 type
。