TypeScript 类型操作
00 分钟
2024-7-5
2024-7-5
type
status
date
slug
summary
tags
category
icon
password
TypeScript 的类型系统非常强大,它提供了各种各样的类型操作符。
通过组合各种类型的操作符,可以用简洁、可维护的方式表达复杂的类型。

泛型

定义

泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。可以简单的理解为带参数的类型。

例子

通过一个简单的例子,让大家更好的理解泛型。
首先定义一个通用的 returnSelf 函数,该函数接收一个参数并直接返回它。
returnSelf 进行调整,让它支持 string 类型的参数。
但是该函数并不是通用的,因为它仅支持 string 类型的参数,我们希望它支持任何类型的参数,可以通过泛型来解决。
函数 returnSelf 中的 T 表示泛型变量,可以用任何有效名称代替。
还可以定义多个泛型变量。

泛型约束

在使用泛型时,因为事先并不知道是哪种类型,所以不能随意的操作其属性和方法。这时候可以使用泛型约束,约束这个泛型的范围( 使用 extends 关键字 )。
定义函数 returnSelfLength 函数返回自身的 length 属性。
因为泛型变量 T 的类型上并不一定具有 length 属性。所以编译报错,可以对泛型进行约束,约束只能传入带有 length 属性的变量。
泛型变量之间,也可以互相约束。

泛型接口

泛型类

泛型默认值

在 TypeScript 2.3 以后,我们可以为泛型中的类型参数指定默认类型。当使用泛型时没有在代码中直接指定类型参数,从实际值参数中也无法推断出类型时,这个默认类型就会起作用。
有默认类型的类型参数被认为是可选的。必选的类型参数不能在可选的类型参数后,如果类型参数有约束,类型参数的默认类型必须满足这个约束。

keyof 运算符

将对象类型生成其 字符串 或者 数字 的联合类型。
如果该类型具有 stringnumber 索引签名,keyof 则将返回这些类型:

typeof 运算符

JavaScript 中的 typeof 可以在表达式上下文中使用。
TypeScript 中的 typeof 可以在类型上下文中使用。用于获取一个变量的类型。

索引类型

索引类型可以用来查找另一种类型的特定属性。
keyof 可以获取对象类型 的联合类型,搭配 索引类型 我们可以获取到 的联合类型。

条件类型

类似于 JavaScript 中的三目运算符。

语法

例子

分布式条件类型

当条件类型作用于 泛型类型 时,且结合联合类型使用时,分布式条件类型会被自动分发成联合类型。
如果不想让条件类型自动分发,可以使用 [] 将它们包裹起来。

映射类型

TypeScript 提供了从旧类型中创建新类型的一种方式——映射类型。
映射类型建立在索引签名的语法之上,它是一种通用类型,通常借助 in 关键字来遍历键以创建类型。

in

可以用来遍历枚举类型。

例子

使用映射类型,复制一个类型。

映射修饰符

在映射期间可以应用两个额外的修饰符:readonly(只读)和 (可选)。
通过添加 +- 前缀表示添加还是删除,如果没有默认为 +

重新映射 as

使用场景

可以结合 模版字面量 将以前的属性名称替换为新的。

infer 关键字

infer 表示申明一个待推断的类型,该类型交给 TypeScript 自己去推断,但是之后会用到该推断的类型。

简单示例

Summary

本文详细介绍了 TypeScript 的泛型、类型操作符、条件类型、映射类型等内容,并通过多个代码示例展示了其使用方法和场景。通过这些内容,可以更好地理解和运用 TypeScript 的类型系统,提高代码的可维护性和灵活性。
::: warning ⚠️
以下文本为初步内容。
:::
TypeScript 的类型系统非常强大,它提供了各种各样的类型操作符。
通过组合各种类型的操作符,可以用简洁、可维护的方式表达复杂的类型。

泛型

定义

泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。可以简单的理解为带参数的类型。

例子

通过一个简单的例子,让大家更好的理解泛型。
首先定义一个通用的 returnSelf 函数,该函数接收一个参数并直接返回它。
returnSelf 进行调整,让它支持 string 类型的参数。
但是该函数并不是通用的,因为它仅支持 string 类型的参数,我们希望它支持任何类型的参数,可以通过泛型来解决。
函数 returnSelf 中的 T 表示泛型变量,可以用任何有效名称代替。
还可以定义多个泛型变量。

泛型约束

在使用泛型时,因为事先并不知道是哪种类型,所以不能随意的操作其属性和方法。这时候可以使用泛型约束,约束这个泛型的范围( 使用 extends 关键字 )。
定义函数 returnSelfLength 函数返回自身的 length 属性。
因为泛型变量 T 的类型上并不一定具有 length 属性。所以编译报错,可以对泛型进行约束,约束只能传入带有 length 属性的变量。
泛型变量之间,也可以互相约束。

泛型接口

泛型类

泛型默认值

在 TypeScript 2.3 以后,我们可以为泛型中的类型参数指定默认类型。当使用泛型时没有在代码中直接指定类型参数,从实际值参数中也无法推断出类型时,这个默认类型就会起作用。
有默认类型的类型参数被认为是可选的。必选的类型参数不能在可选的类型参数后,如果类型参数有约束,类型参数的默认类型必须满足这个约束。

keyof 运算符

将对象类型生成其 字符串 或者 数字 的联合类型。
如果该类型具有 stringnumber 索引签名,keyof 则将返回这些类型:

typeof 运算符

JavaScript 中的 typeof 可以在表达式上下文中使用。
TypeScript 中的 typeof 可以在类型上下文中使用。用于获取一个变量的类型。

索引类型

索引类型可以用来查找另一种类型的特定属性。
keyof 可以获取对象类型 的联合类型,搭配 索引类型 我们可以获取到 的联合类型。

条件类型

类似于 JavaScript 中的三目运算符。

语法

例子

分布式条件类型

当条件类型作用于 泛型类型 时,且结合联合类型使用时,分布式条件类型会被自动分发成联合类型。
如果不想让条件类型自动分发,可以使用 [] 将它们包裹起来。

映射类型

TypeScript 提供了从旧类型中创建新类型的一种方式——映射类型。
映射类型建立在索引签名的语法之上,它是一种通用类型,通常借助 in 关键字来遍历键以创建类型。

in

可以用来遍历枚举类型。

例子

使用映射类型,复制一个类型。

映射修饰符

在映射期间可以应用两个额外的修饰符:readonly(只读)和 (可选)。
通过添加 +- 前缀表示添加还是删除,如果没有默认为 +

重新映射 as

使用场景

可以结合 模版字面量 将以前的属性名称替换为新的。

infer 关键字

infer 表示申明一个待推断的类型,该类型交给 TypeScript 自己去推断,但是之后会用到该推断的类型。

简单示例

上一篇
tsConfig 配置
下一篇
TypeScript 工具类型