本文主要是介绍35、TS 关于泛类约束Partial<T>、Required<T>、Readonly<T>,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Partial<T>:快速把某个接口类型中定义的属性变成可选
Partial 是 TS 中的一个工具类型(Utility Type)
它的作用只有一个:将一个对象类型中的所有属性变为可选属性。
换句话说,Partial<T> 接受一个泛型参数 T,并返回一个新的类型,新类型与 T 相同,但是 T 类型中的所有属性都变为可选属性。
// 快速把某个接口类型中定义的属性变成可选
type Usery = {name: stringpassword: stringaddress: stringphone: string
}type PartialUsery = {name?: stringpassword?: stringaddress?: stringphone?: 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];};
这篇关于35、TS 关于泛类约束Partial<T>、Required<T>、Readonly<T>的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!