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,
  };
})();
相关推荐
灵感__idea3 分钟前
JavaScript高级程序设计(第5版):无处不在的集合
前端·javascript·程序员
小小小小宇6 分钟前
前端双Token机制无感刷新
前端
小小小小宇9 分钟前
重提React闭包陷阱
前端
小小小小宇25 分钟前
前端XSS和CSRF以及CSP
前端
UFIT28 分钟前
NoSQL之redis哨兵
java·前端·算法
超级土豆粉35 分钟前
CSS3 的特性
前端·css·css3
星辰引路-Lefan36 分钟前
深入理解React Hooks的原理与实践
前端·javascript·react.js
wyn200011281 小时前
JavaWeb的一些基础技术
前端
Hygge-star1 小时前
Flask音频处理:构建高效的Web音频应用指南
前端·flask·音视频·pygame·csdn开发云
江城开朗的豌豆1 小时前
JavaScript篇:回调地狱退散!6年老前端教你写出优雅异步代码
前端·javascript·面试