Partial<T>:快速把某个接口类型中定义的属性变成可选

  1. Partial 是 TS 中的一个工具类型(Utility Type)
  2. 它的作用只有一个:将一个对象类型中的所有属性变为可选属性。
  3. 换句话说,Partial<T> 接受一个泛型参数 T,并返回一个新的类型,新类型与 T 相同,但是 T 类型中的所有属性都变为可选属性。
// 快速把某个接口类型中定义的属性变成可选
type Usery = {
   name: string
   password: string
   address: string
   phone: string
}

type PartialUsery = {
  name?: string
  password?: string
  address?: string
  phone?: string
}
// 如上述,就很不友好,友好的表达书写,如下(下述其实和上述是等价的):
type PartialUsery1 = Partial<Usery>

源码中Partial是如何实现的?

这段源码使用关键字 in 和操作符 keyof 定义了一个映射类型。
in 关键字,这个关键字的作用是用于映射类型的。在这里 in 表示的是迭代联合类型中的每个属性,而泛型 P 就表示这些属性

这样,Partial 类型中的成员就与传入的泛型 T 中的成员一致了。属性名称后的 ? 表示可选类型,属性值则是取的泛型 T 中的属性值。由此,便将泛型 T 中的属性转变成了可选属性。

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

Required:把所有可选属性变成必选属性

interface Person {    monicker: string;    age: number;    sex?: string;}
type PersonRequired = Required<Person>;

源码:
-? 符号是一个操作符,用于将属性变为必需的,即必须存在并且不能为 undefined 或 null。}

type Required<T> = {    
    [P in keyof T]-?: T[P]  
}

Readonly:把所有属性变成只读属性

type Readonly<T> = {  readonly [P in keyof T]: T[P];};