面试官:Typescript中的Iinterface与Type的区别?

两者在描述对象时有很多相似之处,但 interface 更偏向于面向对象的设计和扩展,而 type 则在类型组合和别名方面更灵活。选择哪一个主要取决于你的具体需求和团队的编码风格。
首页 新闻资讯 行业资讯 面试官:Typescript中的Iinterface与Type的区别?

1143256494ed38950292676872c138dcc2089e.jpg

在 TypeScript 中,interface 与 type 都可以用来描述对象的形状,但它们之间存在一些关键区别:

声明合并(Declaration Merging)

  • interface:支持声明合并。你可以在多个地方声明同一个接口,TypeScript 会将它们合并成一个接口。例如:

interface Person {
  name: string;
}
interface Person {
  age: number;
}
// Person 合并后等同于 { name: string; age: number; }
  • type:不支持声明合并。重复声明同一个类型别名会报错。

表达能力

  • interface:主要用于描述对象的结构(属性、方法等),适合面向对象的设计模式。

  • type:不仅可以描述对象,还可以定义联合类型、交叉类型、原始类型别名、元组等。例如:

type ID = number | string;
type Coordinates = [number, number];

扩展方式

  • interface:可以通过 extends 关键字继承其他接口,支持接口的扩展和实现。

interface Animal {
  name: string;
}
interface Dog extends Animal {
  breed: string;
}
  • type:虽然不能直接使用 extends,但可以通过交叉类型实现类似扩展的效果:

type Animal = { name: string };
type Dog = Animal & { breed: string };

用途和选择

  • 如果主要用于定义对象的结构,并希望利用声明合并或面向对象的特性,建议使用 interface

  • 如果需要更强的表达能力,比如定义联合类型、元组等,或者希望用一种统一的方式描述多种类型,则可以选择 type

总结来说,两者在描述对象时有很多相似之处,但 interface 更偏向于面向对象的设计和扩展,而 type 则在类型组合和别名方面更灵活。选择哪一个主要取决于你的具体需求和团队的编码风格。