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}`)}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android逆向】记录一次某某虚拟机的逆向

导语 学了一段时间的XPosed&#xff0c;发现XPosed真的好强&#xff0c;只要技术强&#xff0c;什么操作都能实现... 这次主要记录一下我对这款应用的逆向思路 apk检查 使用MT管理器检查apk的加壳情况 发现是某数字的免费版本 直接使用frida-dexdump 脱下来后备用 应用分…

HTML中的CSS超详细使用(附代码图文示例)【干货】

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中的CSS详细使用&#xff08;附代码图片示例&#xff09;以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0…

使用opencv的Sobel算子实现图像边缘检测

1 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题&#xff0c;也是经典的技术难题之一。如何快速、精确地提取图像边缘信息&#xff0c;一直是国内外的研究热点&#xff0c;同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…

如何使用mock.js实现接口测试的自动化?

Mock.js 基础用法介绍 Mock.js是一个常用于生成随机数据和拦截Ajax请求的JavaScript库。本文将介绍Mock.js的用法&#xff0c;包括安装和基础用法&#xff0c;在开始前我们可以看下看&#xff1a;了解 Mock.js 的语法规范。 安装 可以通过npm安装Mock.js&#xff1a; npm i…

如何关闭微信视频号的详细步骤

随着移动互联网的发展&#xff0c;越来越多的人开始使用各种社交平台来分享自己的生活和工作。而微信作为一款全民级别的应用&#xff0c;自然也不例外。在微信中&#xff0c;除了传统的聊天、朋友圈等功能外&#xff0c;还推出了一个名为“视频号”的功能&#xff0c;可以让用…

ansible的基本使用

本章主要介绍在RHEL8中如何安装ansible 及 ansible 的基本使用。 ansible是如何工作的在 RHEL8中安装ansible编写ansible.cfg和清单文件ansible 的基本用法 如果管理的服务器很多&#xff0c;如几十台甚至几百台&#xff0c;那么就需要一个自动化管理工具了&#xff0c; ansi…

YOLOv8改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)

一、本文介绍 本文给大家带来的改进机制是轻量级跨尺度特征融合模块CCFM&#xff08;Cross-Scale Feature Fusion Module&#xff09;其主要原理是&#xff1a;将不同尺度的特征通过融合操作整合起来&#xff0c;以增强模型对于尺度变化的适应性和对小尺度对象的检测能力。我将…

找不到vcomp100.dll,无法继续执行代码怎么解决

在计算机编程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到vcomp100.dll&#xff0c;无法继续执行代码”。这个错误通常出现在使用Visual Studio进行C开发时&#xff0c;它表示程序无法找到vcomp100.dll文件。vcomp100.dll是Visual C 2015 Redist…

基于单片机智能视力保护台灯控制系统设计

**单片机设计介绍&#xff0c;基于单片机智能视力保护台灯控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机智能视力保护台灯控制系统是一种基于单片机技术的设备&#xff0c;在保证照明效果的同时&#xf…

LeetCode 92.反转链表II

题目&#xff1a; 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 方法&#xff1a;灵神 反转链表 代码&#xff1a; class Solution {public ListN…

2024年创建有效SaaS PRD的终极指南

您目前是否正在开发SaaS产品&#xff1f;您是否想要确保您的产品满足目标用户的要求并符合您的业务目标&#xff1f;如果是这样&#xff0c;创建全面的“SaaS产品需求文档&#xff08;PRD&#xff09;”至关重要。 在了解SaaS PRD的具体组成部分之前&#xff0c;必须认识到内容…

弧形导轨的安装注意事项

随着弧形导轨的应用日渐普遍&#xff0c;在日常使用中总会遇到很多各种各样的问题&#xff0c;原因很多是安装不正确或者使用不恰当。不合理的使用不但不能充分发挥其价值还会导致使用寿命大打折扣&#xff0c;使企业造成不必要的损失&#xff0c;因此大伙有必要了解一些安装的…