0046. 顶层类型和底层类型
- 1. 🎯 本节内容
- 2. 🫧 评价
- 3. 🤔 「顶层类型」、「底层类型」官方有给明确定义吗?
- 4. 🤔 「顶层类型」是什么?
- 5. 🤔 「底层类型」是什么?
- 6. 🤔 TS 中的顶层类型和底层类型分别是?
- 7. 🔗 引用
1. 🎯 本节内容
- any
- unknown
- never
- void
- 顶层类型(top type)
- 底层类型(bottom type)
2. 🫧 评价
本章介绍的内容是 TS 类型系统中的一些特殊类型,包括 any、unknown、never、void 类型。
| 笔记 | 简介 |
|---|---|
| 0014.any 类型 | 这篇笔记全面解析了 TypeScript 中 any 类型的定义、特性及使用场景,重点讨论了其关闭类型检查的行为、隐式推断规则、与 never 等类型的交互,以及“类型污染”问题,同时建议通过开启 noImplicitAny 配置和显式声明类型来提升代码安全性。 |
| 0015.unknown 类型 | TypeScript 的 unknown 类型是比 any 更安全的顶层类型,它允许接收任何值但强制要求使用前进行类型检查或缩小,有效避免了类型污染问题,特别适用于处理未知数据源和需要类型安全的场景。 |
| 0016.never 类型 | TypeScript 的 never 类型代表“永远不会出现的值”(空集),作为底层类型可赋值给任何其他类型但不能被任何类型赋值,主要用于表示抛出异常/无限循环的函数返回值、实现类型运算完整性以及进行穷尽性检查,与 void 的核心区别在于 never 表示函数永远不会正常结束。 |
| 0079.void 类型 | 这篇笔记详细探讨了 TypeScript 中 void 类型的定义、用途及其与 undefined 的区别,阐述了 void 在函数返回值、回调函数等场景中的行为和特殊规则,并通过代码示例展示了常见用法、错误案例及最佳实践,帮助开发者深入理解 void 类型在类型系统中的作用和正确使用方式。 |
| 0017.特殊类型之间的兼容性 | 详细记录了 TypeScript 中特殊类型(any、unknown、object、void、undefined、null 和 never)之间的可赋值性关系,并通过引用官方文档的表格清晰展示了这些类型在不同 strictNullChecks 配置下的兼容性规则,是经常需要查阅的资料之一。 |
3. 🤔 「顶层类型」、「底层类型」官方有给明确定义吗?
没有。
在 TypeScript 的类型系统讨论中,经常提到 顶层类型(top type) 和 底层类型(bottom type) 的概念。不过官方文档中并没有专门以 “top type/bottom type” 为标题系统化定义两者,而是散见于不同章节与手册中,以 “unknown = top”“never = bottom” 这样方式提及。比如在 TS for Functional Programmers - Other important TypeScript types 这一节中出现的:

小结
- 也就是说,top type 和 bottom type 其实是社区为了方便 TS 相关问题的沟通而造出来词,虽然官方并没有专门的 doc 来介绍什么是「顶层类型」、「底层类型」。
- 知道这一点还是挺有必要的,这就意味着关于 「顶层类型」、「底层类型」的定义尚未明确,你可以在某篇文章中看到 xxx 是顶层类型,xxx 是底层类型,然后又在其它文章中看到矛盾的说法。
- 因此,我们需要先给「顶层类型」、「底层类型」术语做一个简单的介绍,明确它们的特点,然后咱们再来按照我们下的定义来盘归类。
4. 🤔 「顶层类型」是什么?
- “顶层类型 (top type)” 通常指一个类型系统里 可以代表“几乎所有值” 的类型。
- 换句话说,它是 “大至所有类型的超类型(supertype)” 的那个。
5. 🤔 「底层类型」是什么?
- “底层类型 (bottom type)” 则是指一个类型系统里 “几乎没有值”或根本不能有值” 的类型。
- 换句话说,它是 “小至所有类型的子类型(subtype)” 的那个。
6. 🤔 TS 中的顶层类型和底层类型分别是?
TypeScript 有两个“顶层类型”(any 和 unknown),但是“底层类型”只有 never 唯一一个。
7. 🔗 引用
- TS for Functional Programmers - Other important TypeScript types
- TypeScript 函数式编程指南 - 其他重要的 TypeScript 类型