Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 附录 A:常用类型工具(Utility Types)参考

附录 A:常用类型工具(Utility Types)参考

TypeScript 提供了一组内置的 类型工具(Utility Types),这些工具可以帮助开发者以简洁、可重用的方式操作和转换类型。这些类型是全局可用的,能够增强类型安全性并减少样板代码。本附录涵盖了最常用的类型工具及其用途、示例和实际应用场景。


1. Partial<T>

将类型 T 的所有属性变为可选。

语法

Partial<T>

示例

interface 用户 {
  姓名: string;
  年龄: number;
  邮箱: string;
}

const 部分用户: Partial<用户> = { 姓名: "Alice" }; // 有效,其他属性是可选的

使用场景

适用于更新对象时,只需提供部分字段的情况,例如表单的局部更新。


2. Required<T>

将类型 T 的所有属性变为必填(与 Partial 相反)。

语法

Required<T>

示例

interface 可选用户 {
  姓名?: string;
  年龄?: number;
}

const 必填用户: Required<可选用户> = { 姓名: "Bob", 年龄: 25 }; // 所有字段必须提供

使用场景

确保所有可选属性都被填充,例如在最终确定配置对象时。


3. Readonly<T>

将类型 T 的所有属性设为只读。

语法

Readonly<T>

示例

interface 配置 {
  接口密钥: string;
  端点: string;
}

const 只读配置: Readonly<配置> = { 接口密钥: "xyz", 端点: "/api" };
// 只读配置.接口密钥 = "abc"; // 错误:无法分配到“接口密钥”,因为它是只读属性

使用场景

防止意外修改对象,例如常量或不可变数据。


4. Pick<T, K>

从类型 T 中挑选一组属性 K,生成新类型。

语法

Pick<T, K extends keyof T>

示例

interface 个人信息 {
  姓名: string;
  年龄: number;
  地址: string;
}

const 个人信息概要: Pick<个人信息, "姓名" | "年龄"> = { 姓名: "Charlie", 年龄: 30 }; // 仅包含姓名和年龄

使用场景

提取特定字段,用于简化对象视图,例如在 API 或 UI 组件中。


5. Omit``

从类型 T 中排除属性 K,生成新类型。

语法

Omit<T, K extends keyof any>

示例

interface 用户资料 {
  编号: number;
  姓名: string;
  密码: string;
}

const 公开资料: Omit<用户资料, "密码"> = { 编号: 1, 姓名: "Dave" }; // 不包含密码

使用场景

移除敏感或不必要的字段,例如在公开分享数据时。


6. Record<K, T>

创建一个键为类型 K、值为类型 T 的类型。

语法

Record<K extends keyof any, T>

示例

const 分数: Record<string, number> = {
  Alice: 95,
  Bob: 87,
};

type 状态 = "活跃" | "非活跃";
const 用户状态: Record<状态, string> = {
  活跃: "用户在线",
  非活跃: "用户离线",
};

使用场景

定义具有特定键值约束的字典或映射,例如配置表。


7. Exclude<T, U>

从类型 T 中排除可赋值给 U 的类型。

语法

Exclude<T, U>

示例

type 状态 = "成功" | "错误" | "加载中";
type 非错误状态 = Exclude<状态, "错误">; // "成功" | "加载中"

使用场景

过滤掉不需要的联合类型成员,例如从状态类型中移除错误状态。


8. Extract<T, U>

从类型 T 中提取可赋值给 U 的类型。

语法

Extract<T, U>

示例

type 操作 = "读取" | "写入" | "删除" | string;
type 读写操作 = Extract<操作, "读取" | "写入">; // "读取" | "写入"

使用场景

隔离特定的联合类型成员,例如在权限系统中提取特定操作。


9. NonNullable<T>

从类型 T 中排除 null 和 undefined。

语法

NonNullable<T>

示例

type 可能字符串 = string | null | undefined;
const 确定字符串: NonNullable<可能字符串> = "Hello"; // 仅允许字符串

使用场景

确保值已定义,例如在空值检查或验证之后。


10. Parameters<T>

提取函数类型 T 的参数类型,以元组形式返回。

语法

Parameters<T extends (...args: any) => any>

示例

type 日志函数 = (级别: string, 消息: string) => void;
type 日志参数 = Parameters<日志函数>; // [string, string]

使用场景

用于类型安全的函数参数处理或中间件创建。


11. ReturnType<T>

提取函数类型 T 的返回类型。

语法

ReturnType<T extends (...args: any) => any>

示例

type 获取用户 = () => { 编号: number; 姓名: string };
type 用户 = ReturnType<获取用户>; // { 编号: number; 姓名: string }

使用场景

捕获函数的输出类型,例如用于 API 响应类型定义。


12. Awaited<T>

递归解包 Promise 类型,获取解析后的值类型。

语法

Awaited<T>

示例

type 获取结果 = Promise<Promise<string>>;
type 结果 = Awaited<获取结果>; // string

使用场景

简化异步操作的类型定义,尤其是处理嵌套 Promise 时。


总结表格

类型工具用途示例输入示例输出
Partial<T>所有属性变为可选{ a: string; b: number }{ a?: string; b?: number }
Required<T>所有属性变为必填{ a?: string }{ a: string }
Readonly<T>所有属性设为只读{ a: string }{ readonly a: string }
Pick<T, K>挑选特定属性{ a: string; b: number }, "a"{ a: string }
Omit<T, K>排除特定属性{ a: string; b: number }, "b"{ a: string }
Record<K, T>创建键值对类型`"x""y", number`
Exclude<T, U>排除可赋值类型`"a""b"
Extract<T, U>提取可赋值类型`"a""b"
NonNullable<T>排除 null 和 undefined`stringnull`
Parameters<T>提取函数参数类型(x: number) => void[number]
ReturnType<T>提取函数返回类型() => stringstring
Awaited<T>解包 Promise 类型Promise<string>string
Last Updated:: 3/27/25, 12:57 PM