TS interface和type区别

100 阅读1分钟

TypeScript 中的 interface 和 type 都可以用来描述对象或函数的类型,但它们之间还是有一些区别的:

  1. 扩展性interface 可以通过声明合并(Declaration Merging)来扩展已有的接口,而 type 则不支持。
interface User {

  name: string;

}

interface User {

  age: number;

}
// User 现在有了 name 和 age 属性
  1. 表示能力type 可以表示更多的类型,如联合类型、交叉类型、元组等,而 interface 则不能。
type User = {

  name: string;

} | {

  age: number;

};
  1. 实现和继承interface 可以被类实现(implements)和继承(extends),而 type 则不能。
interface User {

  name: string;

}

class MyUser implements User {

  name = 'Alice';

}

在实际使用中,如果可能,优先使用 interface,因为它提供了更好的代码提示和自动补全。当你需要使用联合类型、交叉类型等复杂类型时,再使用 type