TypeScript 高级类型实战指南

阅读时长 6 分钟读完

前言

TypeScript 是一种强类型的 JavaScript 超集语言,它扩展了 JavaScript 的语法,增加了静态类型检查、类继承、接口等功能,使得 TypeScript 在大型项目的开发中更加可靠、易于维护。在 TypeScript 中,高级的类型系统是最值得关注的新功能之一,通过使用高级类型,我们可以更好地利用 TypeScript 的类型检查,提高代码的可读性和可维护性。

本篇文章将会介绍 TypeScript 的高级类型,包括联合类型、交叉类型、映射类型、条件类型、递归类型等,在实际应用中,我们将会通过一些示例来说明这些高级类型的实际意义和用法。

什么是联合类型?

在 TypeScript 中,联合类型用来表示一个值可能是多种类型中的一种。它使用 | 符号来连接多个类型,例如:string | number 表示一个值可以是 string 类型或 number 类型。

示例代码:

上面的代码中,我们定义了一个 formatValue 函数,它接收一个 string 或 number 类型的参数,根据参数的类型来进行不同的格式化操作。

什么是交叉类型?

在 TypeScript 中,交叉类型用来表示一个值同时具有多种类型的特性,它使用 & 符号来连接多个类型,例如:TypeA & TypeB 表示一个值既属于 TypeA 类型,又属于 TypeB 类型。

示例代码:

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

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

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

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

上面的代码中,我们先定义了两个接口 TypeA 和 TypeB,分别表示个人信息和工作信息。然后,我们定义了一个 getProfile 函数,它的参数类型为 TypeA & TypeB,表示它需要同时满足个人信息和工作信息。在函数中,我们使用模板字符串来拼接各种信息,最终输出一个完整的个人档案。

什么是映射类型?

在 TypeScript 中,映射类型用来从旧类型中创建新类型,并保留旧类型的特征。它使用 in 关键字来表示映射关系,例如:{ [K in keyof T]: T[K] } 表示将类型 T 中的所有属性变成可选属性。

示例代码:

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

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

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

上面的代码中,我们定义了一个 User 接口,表示一个用户对象的基本信息。然后,我们使用映射类型将 User 转换为 OptionalUser 类型,并将所有属性变为可选属性。最后,我们定义了一个 user 变量,它的类型为 OptionalUser,可以省略任意属性。

什么是条件类型?

在 TypeScript 中,条件类型用来根据某种条件选择不同的类型。它使用 extends 关键字来表示条件,例如:T extends U ? X : Y 表示如果类型 T 继承自类型 U,则选择类型 X,否则选择类型 Y。

示例代码:

上面的代码中,我们定义了一个 IsString 条件类型,它的参数类型为 T,并返回一个布尔值。如果 T 继承自 string 类型,则返回 true,否则返回 false。在代码的最后,我们创建了两个变量 str1 和 str2,它们的类型分别为 IsString<string> 和 IsString<number>,并分别赋值为 true 和 false。

什么是递归类型?

在 TypeScript 中,递归类型用来表示一个类型可以自我引用。它可以通过一个间接的辅助类型来实现自我引用,例如:type Tree<t> = { value: T, left?: Tree<t>, right?: Tree<t> } 表示一个带有左右子树的树结构。

示例代码:

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

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

上面的代码中,我们定义了一个 Tree<t> 类型,它的属性包括 value、left 和 right,其中 left 和 right 属性类型为 Tree<t>,表示它们也是一个带有左右子树的树结构。最后,我们创建了一个名为 tree 的变量,它的类型为 Tree<number>,表示一个带有数字值的树结构。

总结

本文讲解了 TypeScript 的五种高级类型:联合类型、交叉类型、映射类型、条件类型和递归类型。这些高级类型能够在开发中极大地提高代码的可读性和可维护性,有助于更好地利用 TypeScript 的类型检查功能。为了更好地理解这些类型,在实际应用中,我们提供了具体的示例代码,希望对你有所启发。

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

纠错
反馈