请解释 TypeScript 中的 Extract<T, U> 的作用和实现原理

推荐答案

Extract<T, U> 是 TypeScript 中的一个实用工具类型,用于从类型 T 中提取出可以赋值给类型 U 的类型。换句话说,Extract<T, U> 会返回 T 中与 U 兼容的类型。

示例

在这个例子中,Extract<T, U>T 中提取出了与 U 兼容的类型 stringboolean,因此 Result 的类型为 string | boolean

本题详细解读

实现原理

Extract<T, U> 的实现原理是基于 TypeScript 的条件类型(Conditional Types)。它的定义如下:

  • T extends U:这是一个条件类型表达式,表示如果 T 可以赋值给 U,则返回 T,否则返回 never
  • never:表示一个永远不会出现的类型,通常用于表示不可能的情况。

工作过程

  1. 类型检查:TypeScript 会检查 T 中的每一个类型是否可以赋值给 U
  2. 类型筛选:如果 T 中的某个类型可以赋值给 U,则保留该类型;否则,丢弃该类型(返回 never)。
  3. 结果生成:最终,Extract<T, U> 会返回所有可以赋值给 U 的类型组成的联合类型。

示例解析

  • string 可以赋值给 U,因此保留。
  • number 不能赋值给 U,因此被丢弃(返回 never)。
  • boolean 可以赋值给 U,因此保留。

最终,Result 的类型为 string | boolean

纠错
反馈