typescript 实现Optional

news2024/11/24 14:40:55

我们先看下面的这段代码,一个学生接口,里面有成员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>>

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多地新能源公交换回燃油车,彻底撕下了新能源车低成本的遮羞布

随着近期多个城市的公交车从新能源客车换回燃油车&#xff0c;新能源汽车是否省钱的问题再次受到关注&#xff0c;而这些企业披露的数据显示出新能源客车并非如预期版那么低成本&#xff0c;并且在使用中遇到了许多麻烦的问题。 一、新能源公交确实有优势 首先是成本方面。确实…

探秘AI赋能的未来世界:CyberAI深度学习技术助力变革

CyberAI平台概述 随着AI技术的极速发展&#xff0c;AI能力正在助力产业加速场景化落地。CyberAI是数新网络面向开发者和企业的一站式AI数据科学平台&#xff0c;提供交互式和可视化建模服务&#xff0c;算法模型全生命周期管理。平台可帮助开发者快速开发AI应用&#xff0c;解…

GO的sql注入盲注脚本

之间学习了go的语法 这里就开始go的爬虫 与其说是爬虫 其实就是网站的访问如何实现 因为之前想通过go写sql注入盲注脚本 发现不是那么简单 这里开始研究一下 首先是请求网站 这里貌似很简单 package mainimport ("fmt""net/http" )func main() {res, …

C++类和对象(3)

目录 再谈构造函数 构造函数体赋值 初始化列表 【注意】 explicit关键字 Static成员 概念 特性 友元 友元函数 友元类 内部类 概念 特性&#xff1a; 匿名对象 拷贝对象时的一些编译器优化 再谈构造函数 构造函数体赋值 在创建对象时&#xff0c;编译…

Python新手必备:掌握os.path模块的8个神奇函数

在Python编程中&#xff0c;os.path模块是一个非常重要的模块&#xff0c;它提供了用于处理文件路径和目录的函数。这些函数可帮助你执行各种文件和目录操作&#xff0c;例如文件检查、路径拼接、目录创建等。 本文将介绍os.path模块中最常用的8个内置函数&#xff0c;并附带丰…

GitHub帐户管理更改电子邮件

登录到您的 GitHub 帐户&#xff1a; 前往 GitHub 网站并使用您的凭据登录。 访问个人设置&#xff1a; 单击右上角的您的头像&#xff0c;然后选择“Settings”&#xff08;设置&#xff09;。 选择电子邮件选项卡&#xff1a; 在左侧边栏中选择“Emails”&#xff08;电子邮…

忘记了路由器的用户名和密码,怎么办?

注意&#xff1a;登录窗口会显示路由器型号&#xff0c;请务必确认是您自己路由器的界面。 解决方法 尝试输入登录密码 如果您的确忘了设置好的密码&#xff0c;就只能把路由器恢复出厂设置&#xff0c;没有超级密码。 恢复出厂前&#xff0c;不妨尝试输入可能的管理密码。一…

Python从门到精通(九):matploblib图形库

Matplotlib 是一个数字绘图库&#xff0c;可以绘制多种图形 绘制图形 曲线图 import matplotlib.pyplot as pltclass PltDemo:def __init__(self) -> None:# 数据self.squares [1, 4, 9, 16, 25]def init_ax(self):# flg&#xff1a;由生成的一系列绘图构建成的整体个图…

SpringBoot中敏感信息脱敏(一个注解搞定)

&#x1f4de;简介&#xff1a;一个注解快速搞定敏感数据脱敏&#xff0c;例如手机号、姓名、银行卡号、身份证号等 一、简述 数据脱敏&#xff1a;数据脱敏&#xff0c;指对某些敏感信息通过脱敏规则进行数据的变形&#xff0c;实现敏感隐私数据的可靠保护。这样就可以在开发…

Python Socket编程

Python Socket编程 文章目录 Python Socket编程1. 弄懂HTTP、Socket、TCP这几个概念五层网络模型 2. client和server实现通信Socket编程模式指南代码实现 3. socket实现聊天和多用户连接4. socket模拟http请求5. socket使用I/O多路复用模式模拟http请求 1. 弄懂HTTP、Socket、T…

基于node.js和Vue游戏商城系统设计

游戏商城系统是一个在线平台&#xff0c;旨在为用户提供购买和销售电子游戏、游戏内物品和其他相关服务。游戏商城系统的主要目标是为玩家提供一个方便、快捷、安全的购物环境&#xff0c;同时也为游戏开发商和发行商提供一个有效的销售渠道。通过这个平台&#xff0c;玩家可以…

【Spring Boot 】Spring Boot 常用配置总结

文章目录 前言1.多环境配置application.propertiesapplication.yaml 2.常用配置3.配置读取4.自定义配置 前言 在涉及项目开发时&#xff0c;通常我们会灵活地把一些配置项集中在一起&#xff0c;如果你的项目不是很大的情况下&#xff0c;那么通过配置文件集中不失为一个很好的…

Android studio 离线配置gradle

Gradle Distributions Gradle Distributions 查看gradle 文件夹下 gradle-wrapper.properties文件中的distributionUrl 版本号 然后在上边网站下载对应需要的gradle对应版本 下载后复制到 gradle wrapper文件下&#xff0c;同时修改 distributionUrl 指向本地文件 然后同步就…

ChatGPT热门项目

1.智能GPT 项目地址&#xff1a;智能GPT&#xff1a;你只要提供OpenAI的API Key&#xff0c;那么它就可以根据你设定的目标&#xff0c;采用Google搜索、浏览网站、执行脚本等方式 主要语言&#xff1a;Python 推荐理由&#xff1a;这是由开发者Significant Gravitas推出的项目…

每天一点python——day94

#每天一点Python——94 #面向对象的三大特征——封装 封装&#xff1a;隐藏内部细节&#xff0c;对外提供操作方式。【提高程序的安全性】 继承&#xff1a;在函数调用时&#xff0c;使用’形参名称值‘的方式进行传参&#xff0c;传递参数的顺序可以与定义时参数顺序不同【提高…

8086汇编程序:多位数码管动态扫描显示2023

实验目的 1.掌握8255A和8086CPU接口方法&#xff0c;掌握8255A的工作方式和编程原理。 2.掌握多位数码管动态扫描显示的工作原理和编程方法。 实验内容 设计8255A 与多位共阴极数码管接口电路&#xff0c;实现在四位LED共阴极数码管上显示数字2023 8255A工作在方式0基本输入输出…

做数据分析为何要学统计学(10)——什么是回归分析

​回归分析&#xff08;regression analysis)是量化两种或两种以上因素/变量间相互依赖关系的统计分析方法。回归分析根据因素的数量&#xff0c;分为一元回归和多元回归分析&#xff1b;按因素之间依赖关系的复杂程度&#xff0c;可分为线性回归分析和非线性回归分析。我们通过…

跑代码中遇到的错误合集(持续更新)

1.TypeError: dropout(): argument ‘input‘ (position 1) must be Tensor, not str 原因&#xff1a;dropout函数接收到的参数是一个字典类型(需手动设置其不要返回字典类型) 解决步骤: 1.根据代码定位到dropout函数 2.定位到函数中的参数 3.对给dropout函数参数赋值的函数的…

【C++练级之路】【Lv.4】类和对象(下)(初始化列表,友元,static成员,编译器的优化)

目录 一、再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 二、static成员2.1 概念2.2 特性 三、友元3.1 引入3.2 友元函数3.2.1 概念3.2.2 特性 3.3 友元类3.3.1 概念3.3.2 特性 四、内部类4.1 概念4.2 特性 五、匿名对象六、编译器的优化6.1 传参优化6.1.1 …

使用python做一个实用的工具,便捷的定位和操作文档

环境准备&#xff1a;totalcommander 我用的totalcommander&#xff0c;python脚本的快捷键也是在totalcommander中注册的&#xff0c;所以需要先在TC界面下&#xff0c;才能通过预定义的快捷键唤起 python 脚本。以下是我的 totalCommander界面&#xff0c;我定义的快捷键是 …