乐闻世界logo
搜索文章和话题

Typescript 中的 type 和 interface 之间有什么区别?

4 个月前提问
3 个月前修改
浏览次数27

1个答案

1

TypeScript 中的 typeinterface 都是静态类型结构,用于帮助开发者在编译阶段捕捉错误,提高代码的可读性和可维护性。它们之间有一些相似之处,也有一些关键的区别。

相似点

  1. 定义形状(Shape):两者都可以用来描述一个对象或函数的形状。
  2. 可扩展性:都支持扩展(type 通过交叉类型,interface 通过继承)。

区别

  1. 扩展性

    • Interface:接口支持开放式扩展,这意味着在相同的作用域内,同一个接口可以被多次声明,并且这些声明会自动合并。
    • Type:类型别名不支持开放式扩展,并且一旦声明,类型别名就不能被重新声明。

    例子

    typescript
    interface Person { name: string; } interface Person { age: number; } // Person 接口自动合并为: // interface Person { // name: string; // age: number; // } type Animal = { name: string; } // 以下会引发错误,因为类型别名不能重新声明 // type Animal = { // age: number; // }
  2. 使用场景

    • Interface:更适合定义公共的API的形状,因为它更容易在声明文件中扩展和重用。
    • Type:由于其支持联合类型和交叉类型等更复杂的类型操作,因此更适用于类型的组合或其他复杂的类型场景。

    例子

    typescript
    type Pet = { name: string; } & { onWalk: () => void; }; type CatOrDog = 'cat' | 'dog';
  3. 声明合并

    • Interface:支持声明合并,如之前例子所示。
    • Type:不支持声明合并。

结论

在选择 typeinterface 时,如果你需要定义类型的组合或利用联合类型,type 是更好的选择。如果你的主要目标是面向对象编程,并且可能需要将定义在不同的地方合并,那么 interface 是更适合的。在许多情况下,这两者可以互换使用;选择哪一个,很大程度上取决于个人或团队的偏好和具体情况。

2024年6月29日 12:07 回复

你的答案