typescript使用解构传参
看下面这个函数
interface Student {id: number;name: string;class: string;sex: string;}function matriculation(student: Student) {//...}
我们要调用它,就需要传递一个实现了Student约束的对象进去
interface Student {id: number;name: string;class: string;sex: string;}function matriculation(student: Student) {//...}let lihua: Student = {id: 1,name: 'Lihua',class: '1A',sex: 'Female',};matriculation(lihua);
到这,都没什么问题,
现在我希望这个函数打印一遍传进来的参数的各个属性
如下在不使用解构传参的情况下,
function matriculation(student: Student) {console.log(`姓名${student.name}`);console.log(`班级${student.class}`);console.log(`性别${student.sex}`);console.log(`学号${student.id}`);}
我们会发现,写法非常臃肿,我们每一次都要使用studen.,
这时候我们可以简化一下,使用解构传参
function matriculation({ id, name, sex, grade }: Student) {console.log(`学号${id}`)console.log(`姓名${name}`)console.log(`性别${sex}`)console.log(`年级${grade}`)}
这样就简洁多了,
更进一步的使用,
比如现在需求改了高年级的同学因为学校已经有他的信息了,所以入学只需要学号就能办理入学了,其他的值可以先使用默认值,
所以我们得把函数和接口改成如下这种
interface Student {id: number;name: string;grade: string;sex: string;}type OptionalStudent<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
这样,函数就能接受某些值为空的参数
然后就是赋值默认值了,
如果不适用解构传参
type OptionalStudent<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;function matriculation(student: OptionalStudent<Student, 'name' | 'grade' | 'sex'>) {const defaultStudent: Student = {id: 0,name: 'Unknown',grade: 'Unknown',sex: 'Unknown',};const studentWithDefault = { ...defaultStudent, ...student };console.log(`学号${studentWithDefault.id}`)console.log(`姓名${studentWithDefault.name}`)console.log(`年级${studentWithDefault.grade}`)console.log(`性别${studentWithDefault.sex}`)}
这代码又臃肿了,还得先声明一个对象,然后再将对象解构再解构传过来的参数,再覆盖
不光写起来臃肿,逻辑也臃肿
这种情况我们也可以使用解构传参来改变,因为解构是支持默认值的,如下
type OptionalStudent<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;function matriculation({ id, name = 'Unknow', grade = 'Unknow', sex = 'Unknow' }: OptionalStudent<Student, 'name' | 'grade' | 'sex'>) {console.log(`学号${id}`)console.log(`姓名${name}`)console.log(`年级${grade}`)console.log(`性别${sex}`)}
相关文章:
typescript使用解构传参
看下面这个函数 interface Student {id: number;name: string;class: string;sex: string;}function matriculation(student: Student) {//...}我们要调用它,就需要传递一个实现了Student约束的对象进去 interface Student {id: number;name: string;class: string;sex: string…...
CSP-J 2023 复赛第4题:旅游巴士
【题目来源】https://www.luogu.com.cn/problem/P9751https://www.acwing.com/problem/content/description/5313/【题目描述】 小 Z 打算在国庆假期期间搭乘旅游巴士去一处他向往已久的景点旅游。 旅游景点的地图共有 n 处地点,在这些地点之间连有 m 条道路。 其中…...
JAVA算法和数据结构
一、Arrays类 1.1 Arrays基本使用 我们先认识一下Arrays是干什么用的,Arrays是操作数组的工具类,它可以很方便的对数组中的元素进行遍历、拷贝、排序等操作。 下面我们用代码来演示一下:遍历、拷贝、排序等操作。需要用到的方法如下 public…...
每日五道java面试题之spring篇(七)
目录: 第一题. 什么是Spring beans?第二题. 一个 Spring Bean 定义 包含什么?第三题. 如何给Spring 容器提供配置元数据?Spring有几种配置方式?第四题. Spring基于xml注入bean的几种方式?第五题:你怎样定义类的作用域…...
Keil编译GD32工程时找不到lib库文件
D:\Keil5\ARM\ARMCLANG\Bin\..\lib\armlib\mc_p.l:SELECTION_SCRIPT(2974): error: L6907E: Expected an expression. 问题 解决方法:因为编译器没有找到那个函数的代码,也就未解析了 其实问题很简单,把你的lib文件加进去,ok了…...
测试C#使用ViewFaceCore实现图片中的人脸遮挡
基于ViewFaceCore和DlibDotNet都能实现人脸识别,准备做个遮挡图片中人脸的程序,由于暂时不清楚DlibDotNet返回的人脸尺寸与像素的转换关系,最终决定使用ViewFaceCore实现图片中的人脸遮挡。 新建Winform项目,在Nuget包管理器中…...
2.21 Qt day2 菜单栏/工具栏/状态栏/浮动窗口、UI界面、信号与槽
思维导图 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",…...
300分钟吃透分布式缓存-16讲:常用的缓存组件Redis是如何运行的?
Redis 基本原理 Redis 简介 Redis 是一款基于 ANSI C 语言编写的,BSD 许可的,日志型 key-value 存储组件,它的所有数据结构都存在内存中,可以用作缓存、数据库和消息中间件。 Redis 是 Remote dictionary server 即远程字典服务…...
上一篇文章补充:已经存在的小文件合并
对于HDFS上已经存在的大量小文件问题,有多种策略可以进行处理和优化: 1. **合并小文件**: - **使用Spark作业合并**:通过编写Spark程序读取小文件并调用repartition()或coalesce()函数重新分区数据,然后将合并后的…...
代码随想录训练营第三十期|第四十三天|动态规划 part05|1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
1049. 最后一块石头的重量 II - 力扣(LeetCode) class Solution {public int lastStoneWeightII(int[] stones) {int sum 0;for (int n : stones) {sum n;}int target sum / 2;int[] dp new int[target 1];for (int i 0; i < stones.length; i…...
c++学习记录 string容器—字符串插入和删除
函数原型: string& insert(int pos,const char* s); //插入字符串string& insert(int pos,const string& str); //插入字符串string& insert(int pos,int n,char c); //在指定位置插入n个字符cstring&…...
【IEEE会议征稿】2024年第九届智能计算与信号处理国际学术会议(ICSP 2024)
2024年第九届智能计算与信号处理国际学术会议(ICSP 2024) 2024年第八届智能计算与信号处理国际学术会议(ICSP 2024)将在西安举行, 会期是2024年4月19-21日, 为期三天, 会议由西安科技大学主办。 欢迎参会&…...
【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制
【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制 文章目录 前言一、脉振高频电压注入法简介(注入在旋转坐标系的d轴)1.旋转高频电压(电流)注入法2.脉振高频电压注入法 二、高频注入理论1.永磁同步电机的高频模型2…...
Java学习——集合框架
Java集合框架(Java Collections Framework)是一套性能优良、使用方便的接口和类的集合,它位于java.util包下。这个框架包含了一系列集合接口的标准实现,比如列表、集合、队列,以及映射。使用这些集合,你可以…...
【鸿蒙 HarmonyOS 4.0】UIAbility、页面及组件的生命周期
一、背景 主要梳理下鸿蒙系统开发中常用的生命周期 二、UIAbility组件 UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。 UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口;一个UIAbility组件中可以通过多个页…...
jdk动态代理与CGLib动态代理
jdk动态代理 目标对象 package com.study;/*** 目标对象(被代理的对象)**/ public class Target implements TargetInf{public String name;public Target() {}public Target(String name) {this.name name;}public String buyCola (String name){Sys…...
Linux 命令行的世界 :4.操作文件和目录
此时此刻,我们已经准备好了做些真正的工作!这一章节将会介绍以下命令: • cp —复制文件和目录 • mv —移动/重命名文件和目录 • mkdir —创建目录 • rm —删除文件和目录 • ln —创建硬链接和符号链接 图形文件管理器能轻松地实现…...
如何使用ArcGIS Pro生成等高线
无论在制图还是规划中,经常会使用到等高线,大多数情况下,从网上获取的高程数据都是DEM文件,我们可以通过ArcGIS Pro来生成等高线,这里为大家介绍一下生成方法,希望能对你有所帮助。 数据来源 教程所使用的…...
golang学习2,golang开发配置国内镜像
go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct...
Stable Diffusion 绘画入门教程(webui)-ControlNet(线稿约束)
上篇文章介绍了openpose,本篇文章介绍下线稿约束,关于线稿约束有好几个处理器都属于此类型,但是有一些区别。 包含: 1、Canny(硬边缘):识别线条比较多比较细,一般用于更大程度得还原照片 2、ML…...
前端笔记——var let const 之间的区别
Var: 关键字来声明变量。它有以下特点: var声明的变量作用域是函数级的,即在函数内部声明的变量在整个函数范围内可见。 var变量可以被重复声明,而不会引发错误。 var变量会存在变量提升(hoisting)现象&…...
AI工具新革命:从ChatGPT到Sora,生成式AI改变世界
这个春节着实精彩,“春山学”吃透了,不如把目光移向OpenAI又一重磅产品——文生视频大模型Sora。智能新纪元已然开启,因为正如周鸿祎所说:“,Sora的诞生意味着AGI(通用人工智能)的实现将从10年缩短到1年。”…...
C 标准库 - <stdio.h> 详解
在 C 语言中,stdio.h 是一个非常重要的头文件,定义了一系列用于输入和输出的函数、变量和宏。本文将逐一介绍 stdio.h 中定义的函数,并提供每个函数的完整示例。 变量类型 在 stdio.h 中定义了三个变量类型: size_t:…...
支付宝小程序中唤起支付(前后端)
Java后台获取支付宝支付唯一订单号 /*** 支付宝小程序支付*/PostMapping(value "/xcxPayZFBTHREE")ResponseBodypublic Map<String,Object> xcxPayZFBTHREE(RequestBody byte[] req) {HashMap<String, Object> objectObjectMap new HashMap<>();…...
AI:139-基于深度学习的语音指令识别与执行
🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…...
选择 Python IDE(VSCode、Spyder、Visual Studio 2022和 PyCharm)
前言 当选择 Python 开发工具时,你需要考虑自己的需求、偏好和项目类型。下面是对VSCode、Spyder、Visual Studio 2022和 PyCharm的对比推荐总结: 结论 1、如果你专注于“数据科学”,选择SpyDer没错。 内容 Visual Studio Code (VS Code)…...
Rabbitmq 超时异常解决:PRECONDITION_FAILED - Timeout value used: 1800000 ms.
Rabbitmq 超时异常解决:PRECONDITION_FAILED - Timeout value used: 1800000 ms. 在使用 docker 启动 rabbitmq 的时候,执行一个超长时间的任务,出现了报错。 查询了一下发现,这个问题在于 rabbitmq 默认客户端超时时间是30分钟,…...
Java架构师之路二、数据库:SQL语言、关系型数据库、非关系型数据库、数据一致性、事务管理等。
目录 SQL语言: 关系型数据库: 非关系型数据库: 数据一致性: 事务管理: 上篇:Java架构师之路一、Java基础知识:Java语言特性、集合框架、IO流、多线程、反射、注解等基础知识。-CSDN博客 下…...
【Spring Cloud】高并发带来的问题及常见容错方案
文章目录 高并发带来的问题编写代码修改配置压力测试修改配置,并启动软件添加线程组配置线程并发数添加Http取样配置取样,并启动测试访问message方法观察效果 服务雪崩效应常见容错方案常见的容错思路常见的容错组件 总结 欢迎来到阿Q社区 https://bbs.c…...
springAOP落地实现
文章目录 前言一、熟悉相关概念:1、Aspect:2、Pointcut:3、Before:4、AfterReturning:5、AfterThrowing:6、After:7、Around: 二、具体使用case:1.pom文件2.代码 总结 前…...
网站投放广告多少钱/北京网站推广营销策划
在使用我的应用程序时,我在尝试从java集合中删除对象时遇到了问题(使用EclipseLink从数据库中提取集合).我想要在具有覆盖等于方法的实体类中删除的对象.我甚至用下面的代码检查了集合中的任何对象是否是我要删除的对象的eqauls:for(AlbumEntity entity : deleteGro…...
北京网站的建设/seo公司运营
文章目录 前言I、运行时期,断点ptrace,直接返回II、分析如何调用的ptrace,hook ptrace2.0 准备工作:砸壳2.1 编写 tweak 分析2.2 具体步骤2.2.1 debugserver2.2.2 分析如何调用的ptrace2.2.1 此案例的hook prace 的代码2.4 DemoIII、 修改 PT_DENY_ATTACHIV、通过tweak,替…...
青岛高端网站开发/成人培训机构
最近遇到一个需求:需要验证用户填写的邮箱地址是否真实存在,是否可达。和普通的正则表达式不同,他要求尝试链接目标邮箱服务器并请求校验目标邮箱是否存在。先来了解DNS之MX记录对于DNS不了解的,请移步百度搜索。DNS中除了A记录(域…...
长春网站建设sok/开网站需要投资多少钱
下面详细的介绍Objective-C中的集合类以及每个集合类的用法,学过其他面向对象编程语言的小伙伴们看到OC的集合类会有种莫名的亲切感,理解起来问题不大,可以类比Java中的集合类去学习。 在Objective-C中的集合类中主要包括不可变的数组--NSArr…...
设计企业品牌网站/网络广告怎么做
目录 1 创建事件 1.1 检查数据库事件是否开启 1.2 开启任务(事件) 1.3 关闭事件 1.4 语法 1.4.1 参数取值 1.4.2 参数定义 1.5 开启事件 1.6 关闭事件 1.7 删除事件 1.8 案例 1 创建事件 1.1 检查数据库事件是否开启 如果 event_scheduler 等于 ON 表示开启 …...
南宁seo平台标准/seo综合查询中的具体内容有哪些
1.Jmeter 基本介绍 简单的说,就是Jmeter能做 功能测试 和 性能测试 。它能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试,还能以多种形式展现测试结果。 比如,我一 开始使用这个工具就是为了接口测试…...