Typescript 内置 23个泛型工具

date
Oct 10, 2025
slug
typescript-generic-tool
status
Published
tags
Typescript
summary
本文将带领大家学习并理解 Typescript 中 23 个泛型工具,并附有示例和练习题。
type
Post
序号
工具类型
意图(我想干嘛)
直觉理解 / 关键词
01
Partial<T>
对象的属性不一定都有
把所有属性改为可选 ?
02
Required<T>
确保所有属性都存在
把所有属性改为必选
03
Readonly<T>
不想让属性被修改
把所有属性改为只读
04
Record<K, T>
创建一个键值映射
相当于 { [key in K]: T }
05
Pick<T, K>
只要部分属性
从 T 里挑出某些 key
06
Exclude<T, U>
从联合类型里去掉某些类型
T 中排除掉 U
07
Extract<T, U>
从联合类型里保留某些类型
T 中保留与 U 交集的类型
08
Omit<T, K>
不要某些属性
从 T 中排除 K
09
NonNullable<T>
去掉 nullundefined
过滤掉空类型
10
Parameters<F>
提取函数参数类型
得到 [参数1类型, 参数2类型, ...]
11
ConstructorParameters<F>
提取构造函数参数类型
类似 Parameters,但用于构造函数
12
ReturnType<F>
提取函数返回值类型
得到函数的返回类型
13
InstanceType<C>
提取类实例类型
得到 new C() 的类型
14
Awaited<T>
拿到 Promise 里包的类型
Promise<T>T
15
ThisParameterType<F>
提取函数的 this 类型
拿出函数声明中绑定的 this
16
OmitThisParameter<F>
删除函数的 this 参数
让函数不再显式依赖 this
17
ThisType<T>
声明对象字面量内部的 this 类型
给对象方法里的 this 加类型
18
ReadonlyArray<T>
不可变数组
数组变成只读版本
19
Uppercase<S>
字符串转大写
"foo""FOO"
20
Lowercase<S>
字符串转小写
"FOO""foo"
21
Capitalize<S>
首字母大写
"hello""Hello"
22
Uncapitalize<S>
首字母小写
"Hello""hello"

🧩 TypeScript 内置泛型工具示例 + 练习题


1️⃣ 对象属性操作系列

工具Partial / Required / Readonly / Pick / Omit / Record
练习题
  1. 创建一个类型 OptionalUser,使得 User 的所有属性可选。
  1. 创建一个类型 UserNameOnly,只保留 name 属性。
  1. 创建一个类型 UserWithoutAge,去掉 age 属性。
  1. 创建一个类型 Coordinates,键为 "lat""lng",值为 number
  1. User 的属性都改成只读。

2️⃣ 联合类型工具

工具Exclude / Extract / NonNullable
练习题
  1. 定义 T = "x" | "y" | "z",创建类型 WithoutX 排除 "x"
  1. 创建类型 OnlyYOrZ,只保留 "y" | "z"
  1. 创建类型 NotNull,去掉 null | undefined

3️⃣ 函数类型工具

工具Parameters / ConstructorParameters / ReturnType / InstanceType
练习题
  1. 提取 add 的参数类型到一个新类型。
  1. 提取 add 的返回类型到一个新类型。
  1. 提取 Person 构造函数参数类型。
  1. 提取 Person 的实例类型。

4️⃣ 异步与 this 操作

工具Awaited / ThisParameterType / OmitThisParameter / ThisType
练习题
  1. 提取 Promise<number> 的包裹类型。
  1. 提取函数 fnthis 类型。
  1. 移除函数 fnthis 参数。
  1. 定义一个对象类型,使用 ThisType 给对象方法绑定 this 类型。

5️⃣ 不可变数组 & 字符串操作

工具ReadonlyArray / Uppercase / Lowercase / Capitalize / Uncapitalize
练习题
  1. 定义一个只读数字数组类型 Numbers.
  1. "typescript" 转成全大写类型。
  1. "HELLO" 转成全小写类型。
  1. "hello world" 首字母大写。
  1. "HelloWorld" 首字母小写。

© 拾光 2025 - 2026

粤ICP备2025472574号