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,
  };
})();
相关推荐
YG亲测源码屋1 分钟前
html表白代码大全可复制免费 html表白网页制作源码
前端·html
夜雪闻竹4 分钟前
React Query + REST API 最佳实践
前端·react.js·前端框架
段ヤシ.5 分钟前
回顾Java知识点,面试题汇总Day12:tomcat、 Java Web(持续更新)
java·前端·tomcat·java web
JAVA学习通7 分钟前
从 Bean 到微服务:一张图吃透 Spring 全家桶底层原理
java·前端·spring
古韵8 分钟前
前端请求库的下一个进化方向:从 Promise 到策略化
前端
独特的螺狮粉10 分钟前
蛋鸡养护周期管理系统 - 鸿蒙PC Electron框架完整实现指南
前端·javascript·华为·electron·前端框架·开源·鸿蒙
忧郁的蛋~15 分钟前
ASP.NET Core Web API 完全指南:请求管道、认证、错误处理到生产部署
前端·后端·asp.net·.net
我穿棉裤了25 分钟前
解决el-form表单校验时显示的红色星号与文字对齐的问题
前端·javascript·vue.js
copyer_xyf26 分钟前
Python 类全面总结
前端·后端·python
copyer_xyf31 分钟前
Python 类型注解:从 TypeScript 迁移理解
前端·后端·python