typescript 实现Optional

我们先看下面的这段代码,一个学生接口,里面有成员id,name,age,gender等等成员,
有一个方法graduate,里面要接受一个Student类型的实参

	interface Student {
	  id: number
	  name: string
	  age: number
	  gender: string
	}
	function graduate(Student: Student) {
	  //...
	}

现在有一个问题,就是学生毕业,可以只需要学生的id其他的都是可选的,
那直接使用Student接口作为实参的约束显然行不通

这时候我们就需要改造一个能使用的来,如下

	interface Student {
	  id: number
	  name: string
	  age: number
	  gender: string
	}
	interface StudentOptional {
	  id: number
	  name?: string
	  age?: number
	  gender?: string
	}
	
	function graduate(Student: Student) {
	  //...
	}

这样改完,错误就很明显了,代码冗余太多了,如果只是一个类还好,但是实际开发中往往是一个很大的类,所以这种程度的代码冗余是无法接受的

所以我们需要一种更简单的修改,让StudentOptional 就来自于Student,只不过里面的属性约束是可选的
Partial可以实现一部分要求,但是使用Partial之后,StudentOptional 中所有的成员就都是可选的了
在这里插入图片描述
但是使用Partial后.,所有约束成员都是可选的了,不符合我们最初的想法,因为id是必须的
而且很遗憾,ts并没有内置这种工具类
所以我们得自己写

	type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>

在这里插入图片描述

我先不解释为什么这样能实现需求,评论区有知道为什么的吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/247006.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【腾讯云 HAI域探秘】借助高性能服务HAI快速学会Stable Diffusion生成AIGC图片——必会技能【微调】

目录 Stable Diffusion基本使用方法 学术加速测试 配置中文插件 Prompt与Negative prompt 采样器说明 人像生成 水光效果 微调的使用 图像生成种子/seed使用 附加/Extra 微调实例测试 图生图微调 ​编辑 使用蒙版微调 Stable Diffusion基本使用方法 环境配置&am…

利用python进行数据分析 第十四章 数据分析案例

本书正文的最后一章&#xff0c;我们来看一些真实世界的数据集。对于每个数据集&#xff0c;我们会用之前介绍的方 法&#xff0c;从原始数据中ᨀ 取有意义的内容。展示的方法适用于其它数据集&#xff0c;也包括你的。本章包含了一 些各种各样的案例数据集&#xff0c;可以用…

【排序算法】快速排序

文章目录 一&#xff1a;基本概念1.1 介绍1.2 排序流程1.3 图解算法1.3.1 第一步1.3.2 第二步1.3.3 第三步1.3.4 第四步 1.4 动画展示 二&#xff1a;算法性能2.1 时间复杂度2.1.1 理想情况2.1.2 最坏情况 2.2 空间复杂度2.2.1 原地排序2.2.2 非原地排序2.2.3 稳定性 三&#x…

KT148A语音芯片一线串口的控制时序起始脉宽的长度说明

一、KT148A一线串口细节点 KT148A语音芯片支持一线串口控制&#xff0c;单线的时序逻辑&#xff0c;所以就存在两个注意细节 起始脉宽的长度要求数据0和数据1的脉宽分配 一线通讯的时序要求 详见完整开发资料的“KT148A语音芯片使用手册3_V4.pdf”文档 章节3.1有详细的描述…

AD20-Excel创建IC类元件库

目录 准备模板AD操作 准备模板 AD操作 结果生成如下&#xff1a; over&#xff01;&#xff01;&#xff01;

CRM客户管理系统好不好用,有哪些判断标准?

市场上有着众多的CRM客户关系管理系统&#xff0c;从中选择一个适合自己企业的系统并非易事。除了需要了解自己的业务需求之外&#xff0c;还需要对市场上CRM系统的区别有一定的了解。不同的CRM系统各有特点&#xff0c;但有一些通用的标准可以用来评估它们的适用性。那么&…

Three.js中文网14入门案例

Three.js中文网 <template><div id"webgl"></div> </template><script setup> import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js;// 创建3D场景对象Scene const scene new TH…

Vue学习计划-Vue2--VueCLi(五)全局事件总线、消息订阅与发布(pubsub)

抛出问题:我们多级组件&#xff0c;或者任意不想关的子组件如何传递数据呢&#xff1f; 1. 全局事件总线&#xff08;$bus&#xff09; 一种组件间通信的方式&#xff0c;适用于任意组件间通信 全局事件总线示意图&#xff1a; 安装全局事件总线&#xff1a; new Vue({..…

ES 如何将国际标准时间格式进行格式化与调整时区

需求&#xff0c;日志收集的时候&#xff0c;时间格式是国际标准时间格式。形如yyyy-MM-ddTHH:mm:ss.SSS。 &#xff08;2023-12-05T02:45:50.282Z&#xff09;这个时区也不对&#xff0c;那如何将此类型的时间&#xff0c;进行格式化呢&#xff1f; 本篇文章体统一个案例&…

前端非常好用的免费网页工具推荐(值得收藏)

1、iloveimg 可在线进行图片编辑、压缩、转换等功能&#xff0c;操作方便&#xff0c;完全免费 2、草料二维码 可在线进行文本、网站、文件、图片、微信等二维码生成 3、比特虫 在线制作网站 ico 图标 4、facicongrabber 免费网页 favicon 提取 5、bazhan.wang 在线扒站工…

上海亚商投顾:沪指收复3000点,房地产板块集体走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日窄幅震荡&#xff0c;创业板指走势较弱&#xff0c;科创50指数跌近1%。房地产板块集体走强&#xff0…

系统的安全性设计

要设计一个安全的系统&#xff0c;除了要了解一些前面讲到的常用的保护手段和技术措施外&#xff0c;还要对系统中可能出现的安全问题或存在的安全隐患有充分的认识&#xff0c;这样才能对系统的安全作有针对性的设计和强化&#xff0c;即“知己知彼&#xff0c;百战百胜”。 下…

调用第三方http接口 hutool工具类

1、引入依赖 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.0.M2</version> </dependency>2、请求组装 String params"<BSXml>" " <MsgHeader>&…

Vue3上传图片和删除图片

<div class"illness-img"><van-uploader:after-read"onAfterRead"delete"onDeleteImg"v-model"fileList"max-count"9":max-size"5 * 1024 * 1024"upload-icon"photo-o"upload-text"上传图…

GaussDB如何创建和管理视图

GaussDB如何创建和管理视图 一、什么是视图 当用户对数据库中的一张或者多张表的某些字段的组合感兴趣&#xff0c;而又不想每次键入这些查询时&#xff0c;用户就可以定义一个视图&#xff0c;以便解决这个问题。 视图与基本表不同&#xff0c;不是物理上实际存在的&#x…

静态HTTP应用的性能优化技巧

在Web开发中&#xff0c;静态HTTP应用以其简单、快速和安全的特点受到了广泛欢迎。然而&#xff0c;随着Web应用的规模不断扩大&#xff0c;性能问题也日益突出。本文将为你介绍一些静态HTTP应用的性能优化技巧&#xff0c;让你的应用飞得更快、更稳定。 一、压缩文件 文件压…

iPhone手机中备忘录如何改变字体颜色

作为一名iPhone用户&#xff0c;我经常使用手机备忘录来记录生活中的点点滴滴。这样&#xff0c;我的大脑就能从繁琐的记忆任务中解脱出来&#xff0c;专注于更重要的事情。 而且&#xff0c;我有一个特别的习惯&#xff0c;那就是使用不同颜色的字体来区分不同的备忘录。这样…

基于SpringBoot的就业信息管理系统设计与实现(源码+数据库+文档)

摘 要 在新冠肺炎疫情的影响下&#xff0c;大学生的就业问题已经变成了一个引起人们普遍重视的社会焦点问题。在这次疫情的冲击之下&#xff0c;大学生的就业市场的供求双方都受到了不同程度的影响&#xff0c;大学生的就业情况并不十分乐观。目前&#xff0c;各种招聘平台上…

解决:Component name “index“ should always be multi-word

原因 要求组件名称以驼峰格式命名&#xff0c;自定义组件名称应该由多单纯组成&#xff0c;防止和html标签冲突&#xff0c;所以index.vue 会报错 解决 1、按照规则驼峰格式&#xff0c;如&#xff1a;appIndex.vue 2、若有.eslintrc.js文件&#xff0c;并在规则中(rules)关…

【数字电路】MacBook使用iverilog进行数字电路仿真

安装流程 在终端中用brew包管理工具进行安装仿真工具&#xff1a; 编译verilog代码&#xff1a; brew install icarus-verilog编译verilog代码&#xff1a; brew install verilatorMacOS系统显示UNIX GUI brew install xquartz可视化仿真波形图&#xff1a; brew install gtk…