编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • Android提升进阶

  • iOS开发和进阶

  • Web开发和进阶

    • README
    • HTML工具手册

    • TypeScript入门

      • README
      • 语言基础
      • 类和对象
      • 高级类型
      • 模块系统
      • 实用工具
        • 01.常用实用工具
          • 1.1 Partial<T>
          • 1.2 Required<T>
          • 1.3 Readonly
          • 1.4 Record
          • 1.5 Pick
          • 1.6 Omit
          • 1.7 Exclude
          • 1.8 Extract
          • 1.9 NonNullable
          • 1.10 ReturnType
          • 1.11 Parameters
          • 1.12 ConstructorParameters
          • 1.13 InstanceType
        • 02.自定义实用工具
          • 2.1 创建可选属性
          • 2.2 创建只读属性
          • 2.3 创建不可为空属性
        • 03.应用场景
    • Vue高级进阶

  • Linux应用开发

  • Apps
  • Web开发和进阶
  • TypeScript入门
杨充
2025-02-22
目录

实用工具

# 专栏笔记总结大全

# 目录介绍

  • 01.常用实用工具
    • 1.1 Partial
    • 1.2 Required
    • 1.3 Readonly
    • 1.4 Record<K, T>
    • 1.5 Pick<T, K>
    • 1.6 Omit<T, K>
    • 1.7 Exclude<T, U>
    • 1.8 Extract<T, U>
    • 1.9 NonNullable
    • 1.10 ReturnType
    • 1.11 Parameters
    • 1.12 ConstructorParameters
    • 1.13 InstanceType
  • 02.自定义实用工具
    • 2.1 创建可选属性
    • 2.2 创建只读属性
    • 2.3 创建不可为空属性
  • 03.应用场景

# 01.常用实用工具

TypeScript 提供了一系列实用工具类型(Utility Types),用于简化类型操作和增强类型系统的灵活性。

这些工具类型可以帮助开发者更高效地处理类型转换、组合和操作。

# 1.1 Partial<T>

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

interface User {
    name: string;
    age: number;
}

type PartialUser = Partial<User>;
// 等价于 { name?: string; age?: number }
1
2
3
4
5
6
7

# 1.2 Required<T>

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

interface User {
    name?: string;
    age?: number;
}

type RequiredUser = Required<User>;
// 等价于 { name: string; age: number }
1
2
3
4
5
6
7

# 1.3 Readonly

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

interface User {
    name: string;
    age: number;
}

type ReadonlyUser = Readonly<User>;
// 等价于 { readonly name: string; readonly age: number }
1
2
3
4
5
6
7

# 1.4 Record<K, T>

创建一个对象类型,其键为 K,值为 T。

type UserRoles = Record<string, string>;
// 等价于 { [key: string]: string }

const roles: UserRoles = {
    admin: "Admin",
    user: "User",
};
1
2
3
4
5
6
7

# 1.5 Pick<T, K>

从类型 T 中选取指定的属性 K。

interface User {
    name: string;
    age: number;
    email: string;
}

type UserNameAndAge = Pick<User, "name" | "age">;
// 等价于 { name: string; age: number }
1
2
3
4
5
6
7
8

# 1.6 Omit<T, K>

从类型 T 中排除指定的属性 K。

interface User {
    name: string;
    age: number;
    email: string;
}

type UserWithoutEmail = Omit<User, "email">;
// 等价于 { name: string; age: number }
1
2
3
4
5
6
7
8

# 1.7 Exclude<T, U>

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


type T = string | number | boolean;
type StringOrNumber = Exclude<T, boolean>;
// 等价于 string | number
1
2
3
4

# 1.8 Extract<T, U>

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

type T = string | number | boolean;
type StringOrBoolean = Extract<T, string | boolean>;
// 等价于 string | boolean
1
2
3

# 1.9 NonNullable

从类型 T 中排除 null 和 undefined。

type T = string | number | null | undefined;
type NonNullableT = NonNullable<T>;
// 等价于 string | number
1
2
3

# 1.10 ReturnType

获取函数类型 T 的返回值类型。

function add(x: number, y: number): number {
    return x + y;
}

type AddReturnType = ReturnType<typeof add>;
// 等价于 number
1
2
3
4
5
6

# 1.11 Parameters

获取函数类型 T 的参数类型组成的元组。

function add(x: number, y: number): number {
    return x + y;
}

type AddParameters = Parameters<typeof add>;
// 等价于 [x: number, y: number]
1
2
3
4
5
6

# 1.12 ConstructorParameters

获取构造函数类型 T 的参数类型组成的元组。

class Person {
    constructor(public name: string, public age: number) {}
}

type PersonConstructorParams = ConstructorParameters<typeof Person>;
// 等价于 [name: string, age: number]
1
2
3
4
5
6

# 1.13 InstanceType

获取构造函数类型 T 的实例类型。

class Person {
    constructor(public name: string, public age: number) {}
}

type PersonInstance = InstanceType<typeof Person>;
// 等价于 Person
1
2
3
4
5
6

# 02.自定义实用工具

开发者可以结合 TypeScript 的类型操作符(如 keyof、in、extends 等)创建自定义的实用工具类型。

# 2.1 创建可选属性

type Optional<T> = {
    [K in keyof T]?: T[K];
};
1
2
3

# 2.2 创建只读属性

type Readonly<T> = {
    readonly [K in keyof T]: T[K];
};
1
2
3

# 2.3 创建不可为空属性

type NonNullableProperties<T> = {
    [K in keyof T]: NonNullable<T[K]>;
};
1
2
3

# 03.应用场景

  • 表单处理:使用 Partial 表示部分提交的表单数据。
  • API 响应:使用 Pick 或 Omit 选择或排除某些字段。
  • 类型安全:使用 ReturnType 和 Parameters 确保函数类型的一致性。
  • 状态管理:使用 Readonly 确保状态不可变。
上次更新: 2026/06/10, 11:13:41
模块系统
基础入门

← 模块系统 基础入门→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式