35、TS 关于泛类约束Partial<T>、Required<T>、Readonly<T>

2024-03-07 22:52

本文主要是介绍35、TS 关于泛类约束Partial<T>、Required<T>、Readonly<T>,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  1. Partial 是 TS 中的一个工具类型(Utility Type)
  2. 它的作用只有一个:将一个对象类型中的所有属性变为可选属性。
  3. 换句话说,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>的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/785093

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include

POJ 1364差分约束

给出n个变量,m个约束公式 Sa + Sa+1 + .... + Sa+b < ki or > ki ,叫你判断是否存在着解满足这m组约束公式。 Sa + Sa+1   +   .+ Sa+b =  Sum[a+b] - Sum[a-1]  . 注意加入源点n+1 。 public class Main {public static void main(Strin

『功能项目』战士的平A特效【35】

我们打开上一篇34武器的切换实例的项目, 本章要做的事情是在战士的每次按A键时在指定位置生成一个平A特效 首先将之前下载的技能拖拽至场景中 完全解压缩后重命名为AEffect 拖拽至预制体文件夹 进入主角动画的战士动画层级 双击第一次攻击 选择Animation 创建事件 创建的动画事件帧放在攻击动画挥剑指定处 命名为PerpetualAtt

创建表时添加约束

查询表中的约束信息: SHOW KEYS FROM 表名; 示例: 创建depts表包含department_id该列为主键自动增长,department_name列不允许重复,location_id列不允许有空值。 create table depts(department_id int primary key auto_increment,department_name varcha

非空约束(Not Null)

修改表添加非空约束 使用DDL语句添加非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL; 示例: 向emp表中的salary添加非空约束。 alter table emp modify salary float(8,2) not NULL; 删除非空约束 使用DDL语句删除非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NULL;

code: 400, msg: Required request body is missing 错误解决

引起这个错误的原因是,请求参数按照get方式给。 应该给json字符串才对 补充: 1. @RequestBody String resource 加@RequestBody必须给json字符串,否则会报错400,记如标题错误。 不加这个的进行请求的话,其实post和get就没有什么区别了。 2. List<String> indexCodes=(List<String>)json.

Vue3图片上传报错:Required part ‘file‘ is not present.

错误 "Required part 'file' is not present" 通常表明服务器期望在接收到的 multipart/form-data 请求中找到一个名为 file 的部分(即文件字段),但实际上没有找到。这可能是因为以下几个原因: 请求体构建不正确:在发送请求时,可能没有正确地将文件添加到 FormData 对象中,或者使用了错误的字段名。 前端代码错误:在前端代码中,可能

机器学习模型中的因果关系:引入单调约束

单调约束是使机器学习模型可行的关键,但它们仍未被广泛使用欢迎来到雲闪世界。 碳ausality 正在迅速成为每个数据科学家工具包中必不可少的组成部分。 这是有充分理由的。 事实上,因果模型在商业中具有很高的价值,因为它们为“假设”情景提供了更可靠的估计,特别是在用于做出影响业务结果的决策时。 在本文中,我将展示如何通过简单的更改(实际上添加一行代码)将传统的 ML 模型(如随机森林、L