小册
这是我整顿的学习材料,十分零碎和欠缺,欢送一起学习
- 古代 JavaScript 高级小册
- 深入浅出 Dart
- 古代 TypeScript 高级小册
- linwu 的算法笔记📒
类型零碎层级
TypeScript 的类型零碎是强类型和动态类型的,这为开发者提供了弱小的类型检查和类型平安保障,同时也减少了肯定的学习复杂性。为了更好地了解 TypeScript 的类型零碎,本文将全面介绍其类型零碎层级,包含顶层类型(Top Type)和底层类型(Bottom Type),以及在这个层次结构中如何解决和操作各种类型。了解 TypeScript 的类型零碎层级有助于咱们更好地应用和把握 TypeScript,写出更强壮、可保护的代码。
1. 顶层类型(Top Type)
顶层类型是所有其余类型的父类型,这意味着在 TypeScript 中的任何类型都能够看作是顶层类型的子类型。TypeScript 中有两个非凡的顶层类型:any
和 unknown
。
1.1 any 类型
any
类型是 TypeScript 的一个逃生窗口,它能够承受任意类型的值,并且对 any
类型的值进行的任何操作都是容许的。应用 any
类型,能够使咱们绕过 TypeScript 的类型查看。上面的例子展现了 any
类型的灵活性:
let a: any = 123; // OK
a = 'hello'; // OK
a = true; // OK
a = {id: 1, name: 'Tom'}; // OK
a.foo(); // OK
咱们能够看到,咱们能够将任何类型的值赋给 any
类型的变量,甚至能够对 any
类型的值进行咱们想要的任何操作,而 TypeScript 编译器并不会对此做出任何投诉。然而,正是因为其超高的灵活性,使得 any
类型在肯定水平上减弱了 TypeScript 的类型安全性,因而在咱们编写 TypeScript 代码时,应尽量避免应用 any
类型。
1.2 unknown 类型
unknown
类型与 any
类型在承受任何类型的值这一点上是一样的,但 unknown
类型却不能像 any
类型那样对其进行任何操作。咱们在对 unknown
类型的值进行操作之前,必须进行类型查看或类型断言,确保操作的安全性。
let u: unknown = 123; // OK
u = 'hello'; // OK
u = true; // OK
u = {id: 1, name: 'Tom'}; // OK
// Error: Object is of type 'unknown'.
// u.foo();
if (typeof u === 'object' && u !== null) {
// OK after type check
console.log((u as { id: number,
name: string }).name);
}
在这个例子中,咱们对 unknown
类型的值 u
进行了类型查看,而后通过类型断言平安地拜访了其 name
属性。
2. 底层类型(Bottom Type)
与顶层类型绝对,底层类型是所有类型的子类型。这意味着,在类型零碎的层次结构中,任何类型都能够被看作是底层类型的超类型。在 TypeScript 中,never
类型是惟一的底层类型。
never
类型用来示意永远不可能存在的值的类型。比方,一个永远抛出谬误或者永远处于死循环的函数的返回类型就是 never
。
function error(message: string): never {throw new Error(message);
}
function infiniteLoop(): never {while (true) {}}
在下面的代码中,函数 error
和 infiniteLoop
的返回类型都是 never
,这是因为这两个函数都永远不会有返回值。
3. 比照:顶层类型 vs 底层类型
顶层类型和底层类型是 TypeScript 类型零碎的两个重要组成部分,它们各自扮演着不同的角色。
顶层类型 any
和 unknown
可能承受任何类型的值,这使得咱们能够灵便地解决不确定类型的数据。然而,any
类型和 unknown
类型在应用上有着重要的区别:any
类型容许咱们对其进行任何操作,而 unknown
类型则要求咱们在操作之前进行类型查看或类型断言,以确保类型的安全性。
底层类型 never
有点非凡,它示意一个永远不会有值的类型。在理论开发中,咱们可能很少间接应用 never
类型,然而它在 TypeScript 的类型推断和控制流剖析中起着十分重要的作用。
- 了解 TypeScript 的类型零碎层级有助于咱们编写更强壮、可保护的 TypeScript 代码。只管
any
类型提供了很大的灵活性,然而它的滥用可能会减弱 TypeScript 的类型安全性。因而,咱们应尽量避免应用any
类型,而优先应用unknown
类型和类型断言、类型爱护等形式来解决不确定类型的数据。 - 同时,尽管咱们可能很少间接应用
never
类型,然而了解它的含意和用法,对于咱们了解 TypeScript 的类型推断和控制流剖析也是十分有帮忙的。