joken-前端工程师

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
  404 随笔 :: 39 文章 :: 8 评论 :: 20万 阅读

在 TypeScript 中,Partial<T> 是一个内置的泛型类型,它可以将传入类型的每个属性变为可选。然而,有时候我们可能需要一种更深度的方式去实现这种转换,尤其是当处理嵌套对象时,我们希望不仅顶层属性变为可选,其内部所有层级的对象属性也都是可选的。

TypeScript 内置的 Partial<T> 只会对直接属性进行转换,并不会递归地影响到嵌套对象中的属性。为了实现这一功能,我们可以定义自己的工具类型 DeepPartial<T>,它会递归地使对象的所有层级的属性都变为可选。

下面是一个简单的实现示例:

type DeepPartial<T> = {
    [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};

这里是如何使用它的例子:

interface Person {
    name: string;
    age: number;
    address: {
        street: string;
        city: string;
    }
}

const partialPerson: DeepPartial<Person> = {
    name: "John",
    // age 属性可以不提供
    address: {
        // street 和 city 都是可选的
        city: "New York"
    }
};

console.log(partialPerson);

在这个例子中,DeepPartial<Person> 使得 Person 接口中的所有属性,包括嵌套的 address 对象内的属性都变成了可选。这为我们在处理复杂数据结构时提供了更大的灵活性。

posted on   joken1310  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示