TypeScript 中如何使用 Extract

阅读时长 4 分钟读完

Extract 是 TypeScript 中非常有用的一个类型工具,它可以从一个类型中提取出符合条件的子类型。本文将详细介绍 Extract 的使用方法,并通过示例代码来说明其深度和学习指导意义。

Extract 的基本用法

在类型系统中,我们经常需要筛选出符合某个条件的类型,这时可以使用 Extract 工具。Extract 的定义如下:

其中,T 是需要进行筛选的类型,U 是筛选条件。Extract 基本的使用方法是将需要筛选的类型和筛选条件传递给 Extract 工具,例如:

在上面的例子中,MyType 是一个由 stringnumberboolean 构成的联合类型,Extract 工具的第一个参数是 MyType,第二个参数是 string,所以 Extract 工具的返回值类型是 string。这样,就将 MyType 中的 string 类型提取出来了。

Extract 的高级用法

Extract 工具不仅可以用于基本类型的筛选,还可以用于对象的筛选。例如,我们定义了一个包含多个属性的对象类型:

我们希望从 MyObj 中提取出 ageheight 属性的类型,可以这样写:

在上面的代码中,keyof MyObj 表示 MyObj 的键集合,即 'name' | 'age' | 'height''age' | 'height' 表示我们希望提取的属性名集合。Extract 工具的返回值是 'age' | 'height',即我们要提取的属性名集合。Pick 工具根据属性名集合从 MyObj 中选出对应的属性并构成一个新的类型。

Extract 工具还可以用于条件类型的定义。例如,我们定义一个条件类型 MyType<T>,其中 T 是一个联合类型:

我们希望将 MyTypestring 类型的子类型提取出来,可以这样写:

在上面的代码中,Extract 工具的第一个参数是 T,表示需要提取的类型。第二个参数是 string,设置了筛选条件。这样,ExtractedType 类型就是 Tstring 类型的子类型。

示例代码

下面是一个很常见的场景,我们需要对一个对象类型的键值对进行类型转换,将其中的字符串值转换为数字值:

-- -------------------- ---- -------
---- ----- - -
  ----- -------
  ---- -------
  ------- -------
--

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

我们可以这样实现:

-- -------------------- ---- -------
---- ----- - -
  ----- -------
  ---- -------
  ------- -------
--

---- ------ - -
  ----- -------
  ---- -------
  ------- -------
--

---- ------------ - -
  -- -- ----- --- ---- ------- ------ - ------ - -----
--

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

在上面的代码中,我们定义了一个转换类型 Converted,它用于将键值对中的字符串值转换为数字值。[K in keyof T] 表示遍历 T 对象的键集合,T[K] 表示键 K 对应的值。T[K] extends string ? number : T[K] 表示若值为字符串,则将其转换为数字,否则不变。最后,Result 类型就是 Input 转换后的类型。

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

纠错
反馈

纠错反馈