TypeScript 面试题
目录

请解释 TypeScript 中的 never 类型和 unknown 类型作为泛型参数时的行为

· 约 4 分钟读完 · 第 149 / 256 章

推荐答案

在 TypeScript 中,never 和 unknown 作为泛型参数时,具有不同的行为:

  • never 类型:当 never 作为泛型参数时,表示该泛型类型不可能被实例化或使用。它通常用于表示永远不会返回的函数或不可能发生的类型。例如,Promise<never> 表示一个永远不会 resolve 或 reject 的 Promise。

  • unknown 类型:当 unknown 作为泛型参数时,表示该泛型类型可以是任何类型,但在使用之前必须进行类型检查或类型断言。它通常用于表示不确定的类型。例如,Promise<unknown> 表示一个 Promise,其 resolve 的值类型未知,需要在使用时进行类型检查。

本题详细解读

never 类型作为泛型参数

never 类型表示一个永远不会发生的值。当 never 作为泛型参数时,它通常用于表示以下几种情况:

  1. 永远不会返回的函数:例如,一个抛出异常的函数或一个无限循环的函数。

  2. 不可能的类型:例如,一个类型守卫中排除了所有可能的类型后,剩下的类型就是 never。

  3. 永远不会 resolve 或 reject 的 Promise:例如,Promise<never> 表示一个永远不会完成的 Promise。

unknown 类型作为泛型参数

unknown 类型表示一个未知的类型。当 unknown 作为泛型参数时,它通常用于表示以下几种情况:

  1. 不确定的类型:例如,一个函数返回的类型不确定,可能是任何类型。

  2. 需要类型检查或类型断言:在使用 unknown 类型的值时,必须进行类型检查或类型断言,以确保类型安全。

  3. 不确定的 Promise 类型:例如,Promise<unknown> 表示一个 Promise,其 resolve 的值类型未知,需要在使用时进行类型检查。

通过理解 never 和 unknown 作为泛型参数时的行为,可以更好地利用 TypeScript 的类型系统来编写更安全和可维护的代码。