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 运算符
将对象类型生成其
键
的 字符串
或者 数字
的联合类型。如果该类型具有
string
或 number
索引签名,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 运算符
将对象类型生成其
键
的 字符串
或者 数字
的联合类型。如果该类型具有
string
或 number
索引签名,keyof
则将返回这些类型:typeof 运算符
JavaScript
中的 typeof
可以在表达式上下文中使用。TypeScript
中的 typeof
可以在类型上下文中使用。用于获取一个变量的类型。索引类型
索引类型可以用来查找另一种类型的特定属性。
keyof
可以获取对象类型 键
的联合类型,搭配 索引类型
我们可以获取到 值
的联合类型。条件类型
类似于
JavaScript
中的三目运算符。语法
例子
分布式条件类型
当条件类型作用于
泛型类型
时,且结合联合类型使用时,分布式条件类型会被自动分发成联合类型。如果不想让条件类型自动分发,可以使用 [] 将它们包裹起来。
映射类型
TypeScript
提供了从旧类型中创建新类型的一种方式——映射类型。映射类型建立在索引签名的语法之上,它是一种通用类型,通常借助
in
关键字来遍历键以创建类型。in
可以用来遍历枚举类型。
例子
使用映射类型,复制一个类型。
映射修饰符
在映射期间可以应用两个额外的修饰符:
readonly
(只读)和 ?
(可选)。通过添加
+
、-
前缀表示添加还是删除,如果没有默认为 +
。重新映射 as
使用场景
可以结合
模版字面量
将以前的属性名称替换为新的。infer 关键字
infer
表示申明一个待推断的类型,该类型交给 TypeScript
自己去推断,但是之后会用到该推断的类型。简单示例
- 作者:小白
- 链接:https://xiaobai-notes.top/article/ts-template-4
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。