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,
  };
})();
相关推荐
Never_Satisfied1 分钟前
在 JavaScript 中,删除数组中内容为xxx的元素
java·前端·javascript
_菜鸟果果2 分钟前
Vue3+echarts 3d饼图
前端·javascript·echarts
Luffe船长1 小时前
前端vue2+js+springboot实现excle导入优化
前端·javascript·spring boot
Demoncode_y2 小时前
前端布局入门:flex、grid 及其他常用布局
前端·css·布局·flex·grid
明天最后2 小时前
使用 Service Worker 限制请求并发数
前端·service worker
java水泥工2 小时前
基于Echarts+HTML5可视化数据大屏展示-电信厅店营业效能分析
前端·echarts·html5·大屏展示
鹿鹿鹿鹿isNotDefined2 小时前
Pixelium Design:Vue3 的像素风 UI 组件库
前端·javascript·vue.js
运维行者2 小时前
知乎崩了?立即把网站监控起来!
前端·javascript·后端
stayong2 小时前
市面主流跨端开发框架对比
前端
庞囧2 小时前
大白话讲 React 原理:Scheduler 任务调度器
前端