Typescript中如何实现Partial<T>

在 TypeScript 中,Partial<T> 是一个内置的工具类型,用于将给定类型 T 中的所有属性转换为可选属性。

1. 示例

ts 复制代码
type Person = {
  name: string;
  age: number;
  address: string;
};

type PartialPerson = Partial<Person>;

/*
    PartialPerson 的类型为:
    {
      name?: string | undefined;
      age?: number | undefined;
      address?: string | undefined;
    }
*/

在上面的示例中,Partial<Person> 将类型 Person 中的所有属性转换为可选属性,添加了 ? 符号。

这样,PartialPerson 类型中的每个属性都可以是该属性的类型或者 undefined

2. 过程

下面是一个手动实现 Partial<T> 的示例:

ts 复制代码
type Partial<T> = {
  [P in keyof T]?: T[P];
};

在上面的示例中,我们使用了映射类型来遍历类型 T 中的每个属性,并将其转换为可选属性。

[P in keyof T] 表示遍历 T 类型中的每个属性,并使用索引签名 P 来表示属性名。

然后,通过添加 ? 符号将属性转换为可选属性,并使用类型 T[P] 来表示属性的类型。

2.1 keyof

在 TypeScript 中,keyof 是一个用于获取类型中所有属性名称的操作符。 它返回一个由类型中所有属性键组成的联合类型。

ts 复制代码
type Person = {
  name: string;
  age: number;
  address: string;
};

type PersonKeys = keyof Person; // 类型为 "name" | "age" | "address"

// `PersonKeys` 类型是 `Person` 类型中所有属性的联合类型。
// 这意味着 `PersonKeys` 只能是 `"name"`、`"age"` 或 `"address"` 这三个字符串字面量类型中的一个。

2.2 测试

ts 复制代码
(() => {
  type Foo = {
    a: string;
    b: number;
    c: boolean;
  };

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

  const a: MyPartial<Foo> = {};

  const b: MyPartial<Foo> = {
    a: "BFE.dev",
  };

  const c: MyPartial<Foo> = {
    b: 123,
  };

  const d: MyPartial<Foo> = {
    b: 123,
    c: true,
  };

  const e: MyPartial<Foo> = {
    a: "BFE.dev",
    b: 123,
    c: true,
  };
})();
相关推荐
ekuoleung几秒前
量化平台中的 DSL 设计与实现:从规则树到可执行策略
前端·后端
小研说技术6 分钟前
实时通信对比,一场MCP协议的技术革命
前端·后端·面试
kyriewen10 分钟前
React Hooks原理:为什么不能写在if里?揭开Hook的“魔法”面纱
前端·react.js·前端框架
敲代码的彭于晏13 分钟前
Claude Code Token 烧得太快?这8个方案帮你立省90%!
前端·ai编程·claude
可视之道15 分钟前
设备拓扑图中的实时状态映射与动画策略:告警闪烁、流向动画、质量码怎么共存
前端
涂兵兵_青石疏影16 分钟前
绘制图像-clip方法
前端
焦糖玛奇朵婷34 分钟前
解锁扭蛋机小程序的五大优势
java·大数据·服务器·前端·小程序
SwJieJie44 分钟前
windsurf的配置和项目规则、工作流、agent技巧使用
前端
白日梦想家6811 小时前
从基础入手,分清一次性定时器与永久定时器
前端
AIwork4me1 小时前
别再把 RAG 当知识库:用 AutoClaw 搭一套会进化的 Karpathy LLM Wiki
前端