在 TypeScript 的开发中,never 是一个非常特殊的类型。虽然它似乎没有什么特别的用处,但实际上,正是由于它的特殊用途,使得 TypeScript 中的一些高级类型操作得以实现。本文将详细介绍 never 类型的作用和使用方法。
什么是 never 类型
never 是 TypeScript 的一种特殊类型,表示一个永远不可能出现的值。它是所有类型的子类型,也就是说,任何类型都可以赋值给 never 类型。
never 类型在函数类型中非常有用,可以用来表示不可达代码的情况。比如一个函数中抛出错误的语句,这时候返回的就可以是 never 类型。又比如一个永远无法结束的死循环函数,它也返回的是 never 类型。
如何使用 never 类型
下面通过一些示例代码来说明 never 类型的使用。
示例-1: 抛出错误的函数
function throwError(): never { throw new Error("something wrong!"); }
示例-2: 永远无法结束的函数
function neverEnd(): never { while (true) {} }
示例-3: 类型守卫
TypeScript 中的类型守卫可以用来保证类型的正确性,在某些情况下,当我们的类型守卫都执行完毕之后,就会得到一个从未见过的类型。此时,我们就可以使用 never 类型去处理它。
-- -------------------- ---- ------- ---- --------- - ------ - ------ - -------- -------- --------------- ----------- ----- -- ------ - ------ ------ ----- --- --------- - -------- --------------- ----------- ----- -- ------ - ------ ------ ----- --- --------- - -------- ---------------- ----------- ----- -- ------- - ------ ------ ----- --- ---------- - -------- ------------------- ---------- - -- ----------------- - --------------------------------- - ---- -- ----------------- - ------------------------------ - ---- -- ------------------ - ----------------- - ----- - ------ - ---- - ----- ------ ----- - ------ - -
示例-4: 类型推导
never 类型在一些类型推导和类型操作中也非常有用。比如在下面的例子中,使用 never 类型,通过过滤操作来获取一个数组中的 never 类型。
type Diff<T, U> = T extends U ? never : T; type Filter<T, U> = T extends U ? never : T; type Data = string | number | boolean | never[] | null; type Result = Filter<Data, never[]>; // never[]
示例-5: 写一个全面的类型保护函数
在写一些高级的 TypeScript 程序时,可能会需要写一些全面的类型保护函数。这时候,我们就可以使用 never 类型来强制要求编译器对每一种情况都有覆盖。
-- -------------------- ---- ------- ---- ---------- - ------ - ------ - ------- - ---- - ---------- -------- ------------- ------------ ----- -- ---- - ------ ----- --- ----- - -------- ------------------ ------------ ----- -- --------- - ------ ----- --- ---------- - -------- -------------------- ------------ ----- -- -- - ------ ------ ----- --- -------- -- ----- --- ---- -- ------------------------- --- -- - -------- -------------- ------- ------------------ --- ----- -- - - -- -------------- -- ------------------- - ------ ----- - ---- -- ---------------------- - ------ ----- - ---- -- ------- ----- --- -------- -- ------ ----- --- -------- -- ------ ----- --- ---------- - ------ ----- - ----- ------ ----- - ------ ------ ------ -
总结
never 类型在 TypeScript 中是非常重要的,它可以用来表示一些不可能发生的情况。在函数类型、类型推导以及类型守卫中,never 类型都有着非常重要的使用场景。希望本文对读者们有所帮助,让大家更好的理解 never 类型的使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/652c91df7d4982a6ebe3daa5