发布于 2026-01-06 4 阅读
0

TypeScript 中的接口与类型别名——快速比较

TypeScript 中的接口与类型别名——快速比较

对于任何使用 TypeScript 的人来说,无论是新手还是经验丰富的程序员,这都可能令人困惑。两种方法都能满足类似的需求。

本文将快速介绍 TypeScript 中哪些特性可以实现为类型别名或接口。为了便于理解,我力求简洁明了,使文章具有概览性。

👉总结:你不在乎每个细节上的差别?那你应该用哪个?

使用界面直到需要输入类型为止
——orta

概述:接口 (I) 与类型别名 (T)

特征 T 例子
基本元素 type UUID = string
延伸/相交 Response & ErrorHandling
工会 string | number
映射对象类型 ['apple' | 'orange']: number
扩充现有类型 declare global { interface Window { … } }
使用 typeof 声明类型 Response = typeof ReturnType<fetch>
元组 [string, number]
函数 (x: number, y: number): void
递归 Nested { children?: Nested[] }

基本元素

❌:接口
✅:类型别名

string构成 TypeScript 中的基本类型numberboolean

图片描述

延伸/相交

✅:接口
✅:类型别名

虽然接口别名和类型别名的交集和扩展并不完全相同,但为了方便举例,我将它们放在一起讨论。当类型键同时出现在你想要扩展或交集的两个类型中时,就会出现区别。

因此,如果扩展键或交叉键的类型不同:

  • 类型别名允许你这样做,但会将该类型更改为never
  • 接口抛出错误,提示类型不兼容。

图片描述

映射对象类型

❌:接口
✅:类型别名

使用此方法在对象中输入键。

以下是一些它的实际应用:

  • [key: string]仅允许使用字符串作为键
  • [key: number]仅允许使用数字作为密钥
  • [key in keyof T as `get${Capitalize<string & key>}`]仅允许以 `.` 开头的键get...,例如在 Getter 对象中看到的键。

图片描述

工会

❌:接口
✅:类型别名

Typescript 的等效项OR:类型可以是 `T` x、`C` y、`D`z或任意多个类型。

图片描述

扩充现有类型

✅:接口
❌:类型别名

jQuery您可以向已有的类型添加字段。当您向现有类型(例如)添加新字段(例如自动完成库)时,此功能非常有用window

图片描述

元组

✅:接口
✅:类型别名

如果你在 React 中使用过 Hooks,那么你就知道元组的用途了。

单个函数调用可以返回一个值和函数的数组,这些值和函数是解构的,可以用作完全类型的变量:const [name, setName] = useState('')

图片描述

函数

✅:接口
✅:类型别名

函数可以使用参数类型和返回类型进行注释。

图片描述

递归

✅:接口
✅:类型别名

递归使用起来很简单。请确保?为递归属性添加可选参数。否则,TS 编译器在查找无限递归时会报错。

图片描述


更多资源


如果您觉得这篇文章有趣,请在这条推文上点个赞❤️,并考虑在Twitter上关注我关于#webperf、#buildinpublic和#frontend等方面的🎢旅程。


Simon Wicki 是一位居住在柏林的自由开发者。曾在 JustWatch 参与 Web 和移动应用开发。精通 Vue、Angular、React 和 Ionic。热爱前端、技术、Web 性能优化和非虚构类书籍。

👉关注我的推特账号,获取我的最新动态。

文章来源:https://dev.to/zwacky/interface-vs-type-alias-in-typescript-quick-comparison-2g37