当前位置: 首页 > news >正文

深入理解 TypeScript 的 Partial<T> 类型

1. 基本概念

Partial<T> 的作用是将类型 T 的所有属性都变为可选属性

换句话说,它创建一个新类型,这个新类型拥有原类型 T 的所有属性,但每个属性都变成了可选的(即可以不存在)。

interface User {id: number;name: string;age: number;email: string;   
}
type PartialUser = Partial<User>;   
// 等价于:   
interface PartialUser {id?: number;name?: string;age?: number;email?: string;
}

2. 为什么在 removeEmptyValues 中使用 Partial<T>

在我们的 removeEmptyValues 函数中:

export const removeEmptyValues = <T extends Record<string, any>>(obj: T): Partial<T> => {// 实现...
};

使用 Partial<T> 作为返回类型是因为:

  1. 函数会删除某些属性:当删除空值属性后,返回的对象可能不再包含原类型 T 的所有属性
  2. 类型安全:如果不使用 Partial<T>,TypeScript 会认为返回的对象仍然包含所有原属性,这会导致类型不匹配

3. Partial<T> 的实现原理

在 TypeScript 源码中,Partial<T> 是这样定义的:
 

type Partial<T> = {[P in keyof T]?: T[P];
};

解释:

  • keyof T:获取类型 T 的所有属性名组成的联合类型
  • [P in keyof T]:遍历 T 的每个属性
  • ?: T[P]:将每个属性变为可选属性,并保持原类型

4. 与相关类型的对比

Partial<T> vs Required<T>

  • Partial<T>:所有属性变为可选
  • Required<T>:所有属性变为必选

Partial<T> vs Pick<T, K>

  • Partial<T>:保留所有属性,但都变为可选
  • Pick<T, K>:只保留指定的属性 K

 

5. 如果不使用 Partial<T> 会怎样?

如果我们这样写:

function removeEmptyValues<T>(obj: T): T {// 实现...
}
  • TypeScript 会认为返回的对象仍然包含所有原属性
  • 但实际上我们可能删除了某些属性
  • 这会导致类型系统与实际运行时行为不一致

6. 总结

Partial<T> 的核心要点:

  1. 它创建一个新类型,包含原类型的所有属性但都变为可选
  2. 它常用于表示"可能不完整的对象"
  3. 在数据处理函数(如删除属性的函数)中特别有用
  4. 它帮助保持类型系统的准确性,即使对象结构发生了变化

相关文章:

  • 菜狗的脚步学习
  • [SAP] 通过程序名获取事务码TCode
  • Scala和Go差异
  • c++STL-通用(反向)迭代器适配器
  • 算法第十七天|654. 最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • 第十六章 常用存储器介绍
  • 手机相册的 “智能分类” 功能
  • 数学复习笔记 7
  • Playwright 安装配置文件详解
  • Spark缓存-cache
  • 数据擦除标准:1-Pass vs. 3-Pass vs. 7-Pass有什么区别,哪个更好?
  • 【MySQL】第三弹——表的CRUD进阶(一)数据库约束
  • 专栏特辑丨悬镜浅谈开源风险治理之SBOM与SCA
  • 鸿蒙Next开发 获取APP缓存大小和清除缓存
  • Open Source Geospatial Content Management System -GeoNode
  • 《100天精通Python——基础篇 2025 第18天:正则表达式入门实战,解锁字符串处理的魔法力量》
  • Leetcode 3547. Maximum Sum of Edge Values in a Graph
  • Excelize 开源基础库发布 2.9.1 版本更新
  • win部署Jenkins 自动化部署发布后端项目
  • 6. 多列布局/用户界面 - 杂志风格文章布局
  • 哲学新书联合书单|远离苏格拉底
  • 【社论】个人破产探索,要守住“诚实而不幸”的底线
  • 美股全线收涨:道指涨逾千点,纳斯达克中国金龙指数涨5.4%
  • 全国汽车以旧换新补贴申请量突破1000万份
  • 城事 | 重庆新增热门打卡地标,首座熊猫主题轨交站亮相
  • “饿了么”枣庄一站点两名连襟骑手先后猝死,软件显示生前3天每日工作超11小时