TypeScript 中 never 类型之使用技巧

阅读时长 4 分钟读完

TypeScript 是一种静态类型的 JavaScript 超集,它提供了许多强大的工具来帮助开发者更好地编写可维护、可扩展的代码。其中一个非常有用的类型是 never 类型,本文将介绍 never 类型的使用技巧,并提供一些示例代码帮助读者更好地理解这个类型。

什么是 never 类型

never 类型表示那些永远不会发生的值的类型。它通常用于描述那些抛出异常或者无限循环的函数的返回值类型。例如:

上面的 throwError 函数会抛出一个异常,然后终止程序的执行,因此它的返回值类型是 never。而 infiniteLoop 函数则是一个无限循环,它永远不会返回,因此它的返回值类型也是 never

never 类型的使用技巧

1. 辅助类型

never 类型可以用于定义一些辅助类型。例如,我们可以使用 never 类型来定义一个类型,它表示除了某些特定的值之外,其他的所有值都是无效的:

上面的代码定义了一个泛型类型 InvalidValue<T>,它接受一个类型参数 T,并返回一个新的类型。如果 Tstringnumber 类型,则返回 never 类型,否则返回 T

我们可以使用这个类型来定义一个只能接受布尔值的函数:

上面的代码中,onlyAcceptBoolean 函数只接受布尔值作为参数,如果传递其他类型的值,编译器会报错。

2. 类型守卫

never 类型可以用于类型守卫,帮助我们在编译时检查代码的正确性。例如,我们可以使用 never 类型来定义一个函数,它接受一个联合类型的参数,并根据参数的类型来执行不同的操作:

-- -------------------- ---- -------
-------- ------------------ ------ - ------- -
  -- ------- ----- --- --------- -
    -- ---
  - ---- -- ------- ----- --- --------- -
    -- ---
  - ---- -
    ----- ----------------- ----- - ------
  -
-
展开代码

上面的代码中,我们使用了一个 _exhaustiveCheck 变量来占据 never 类型,这样如果 value 的类型不是 string 或者 number,编译器就会报错。

3. 类型推断

never 类型还可以用于类型推断,帮助我们在编写复杂的函数时自动推断返回值类型。例如,我们可以使用 never 类型来定义一个函数,它接受一个数组作为参数,并返回数组中的最后一个元素:

上面的代码中,我们使用了一个条件类型来判断数组的类型,并根据结果返回不同的类型。如果数组的类型是 T extends [...infer _, infer L],则返回 L 类型,否则返回 never 类型。

我们可以使用这个函数来获取一个数组的最后一个元素,并自动推断返回值的类型:

上面的代码中,我们使用了 as const 来告诉编译器这是一个只读数组,这样就可以自动推断出返回值的类型了。

结语

never 类型是 TypeScript 中非常有用的一个类型,它可以帮助我们编写更加可靠、健壮的代码。本文介绍了 never 类型的使用技巧,并提供了一些示例代码帮助读者更好地理解这个类型。希望本文能够对读者有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6785ccfb5638eae96013bde3

纠错
反馈

纠错反馈