共计 1976 个字符,预计需要花费 5 分钟才能阅读完成。
点击在线浏览,体验更好 | 链接 |
---|---|
古代 JavaScript 高级小册 | 链接 |
深入浅出 Dart | 链接 |
古代 TypeScript 高级小册 | 链接 |
类型零碎层级
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
类型的值进行操作之前,必须进行类型查看或类型断言,确保操作的安全性。
上面的例子展现了 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 的类型推断和控制流剖析也是十分有帮忙的。