当前位置: 首页 > news >正文

面试题-TS(十):如何处理可选属性和默认参数?

面试题-TS(10):如何处理可选属性和默认参数?

1. 可选属性

1.1 什么是可选属性?

在TypeScript中,可选属性是指在定义接口或类时,指定某些属性不是必须的,可以存在也可以不存在。使用可选属性可以让我们定义更灵活的数据结构,允许对象中包含额外的属性,而不会报错。

1.2 如何定义可选属性?

在接口中,我们可以在属性名后面加上?来定义可选属性。在类中,我们可以在属性声明时赋予undefined初始值,也可以在构造函数参数中使用?来指定可选属性。

以下是一个简单的可选属性的示例:

// 定义接口
interface Person {name: string;age?: number; // 可选属性
}// 定义类
class MyClass {name: string;age?: number; // 可选属性constructor(name: string, age?: number) {this.name = name;this.age = age;}
}

1.3 如何使用可选属性?

在使用对象时,我们可以根据需要赋值给可选属性,也可以不赋值,它们都是合法的。

// 使用接口
const person1: Person = { name: "John" };
const person2: Person = { name: "Alice", age: 25 };// 使用类
const obj1 = new MyClass("Bob");
const obj2 = new MyClass("Eve", 30);

在上面的示例中,我们创建了两个Person类型的对象,其中age属性是可选的。在使用类MyClass创建对象时,age参数也是可选的,可以根据需要传递。

2. 默认参数

2.1 什么是默认参数?

在TypeScript中,默认参数是指在函数声明时为参数提供默认值。当函数调用时未传递该参数或传递undefined时,将使用默认值。

2.2 如何定义默认参数?

在函数声明中,我们可以为参数指定默认值。这可以通过在参数名后面使用赋值操作符=来实现。

以下是一个带有默认参数的示例:

// 带有默认参数的函数
function greet(name: string, greeting: string = "Hello") {console.log(`${greeting}, ${name}!`);
}

2.3 如何使用默认参数?

在调用带有默认参数的函数时,我们可以选择不传递该参数,这样函数会使用默认值。

greet("John");         // 输出:Hello, John!
greet("Alice", "Hi");  // 输出:Hi, Alice!
greet("Bob", undefined);// 输出:Hello, Bob! (undefined会使用默认值)

在上面的示例中,我们调用了greet函数,其中第二个参数greeting是带有默认值的。在第一个例子中,我们未传递第二个参数,所以函数使用了默认值"Hello"。在第二个例子中,我们传递了第二个参数"Hi",所以函数使用了我们传递的值。在第三个例子中,我们传递了undefined,这也会使用默认值。

3. 可选属性和默认参数的灵活性应用

3.1 函数中的可选参数和默认参数

在函数中,可选参数和默认参数可以一起使用,以提供更大的灵活性。我们可以将一些参数定义为可选的,将一些参数定义为带有默认值的。

以下是一个例子:

function sendMessage(message: string, recipient?: string, sender: string = "Unknown") {console.log(`From: ${sender}, To: ${recipient || "Everyone"}, Message: ${message}`);
}

在上面的示例中,我们定义了一个sendMessage函数,其中recipientsender参数是可选的和带有默认值的。这样,我们在调用函数时,可以只传递必要的参数,而其他参数会使用默认值。

sendMessage("Hello");              // 输出:From: Unknown, To: Everyone, Message: Hello
sendMessage("Hi", "John");         // 输出:From: Unknown, To: John, Message: Hi
sendMessage("Hey", "Alice", "Bob"); // 输出:From: Bob, To: Alice, Message: Hey

3.2 对象中的可选属性和默认属性

在对象中,我们可以将一些属性定义为可选属性,将一些属性定义为带有默认值的属性。这样可以创建更灵活的对象结构,允许对象中包含额外的属性,并提供默认值。

以下是一个例子:

interface Person {name: string;age?: number;gender?: string;
}function createPerson(info: Person) {const { name, age = 0, gender = "Unknown" } = info;console.log(`Name: ${name}, Age: ${age}, Gender: ${gender}`);
}

在上面的示例中,我们定义了一个Person接口,其中agegender属性是可选的和带有默认值的。在createPerson函数中,我们解构传入的info对象,并使用默认值来处理未传递的属性。

createPerson({ name: "John" });         // 输出:Name: John, Age: 0, Gender: Unknown
createPerson({ name: "Alice", age: 25 }); // 输出:Name: Alice, Age: 25, Gender: Unknown
createPerson({ name: "Bob",gender: "Male" }); // 输出:Name: Bob, Age: 0, Gender: Male

在上面的示例中,我们分别创建了三个Person对象,其中agegender属性都是可选的。函数会根据传入的对象使用默认值,或者使用对象中的值。

4. 小结

可选属性和默认参数是TypeScript中用于提供灵活性的两个重要特性。可选属性允许我们在定义接口和类时指定某些属性是可选的,而默认参数允许我们为函数参数提供默认值。在使用这两个特性时,我们可以根据需要为对象和函数提供更灵活的数据结构和调用方式。通过合理使用可选属性和默认参数,我们可以使代码更简洁、更易于维护,并提高代码的可读性和可复用性。让我们在TypeScript中充分利用这两个特性,构建出更优雅的应用程序。

相关文章:

面试题-TS(十):如何处理可选属性和默认参数?

面试题-TS(10):如何处理可选属性和默认参数? 1. 可选属性 1.1 什么是可选属性? 在TypeScript中,可选属性是指在定义接口或类时,指定某些属性不是必须的,可以存在也可以不存在。使用可选属性可以让我们定…...

Istio Pilot源码学习(一):Pilot-Discovery启动流程、ConfigController配置规则发现

本文基于Istio 1.18.0版本进行源码学习 1、Pilot-Discovery工作原理 Pilot-Discovery是Istio控制面的核心,负责服务网格中的流量管理以及控制面和数据面之间的配置下发 Pilot-Discovery从注册中心(如Kubernetes)获取服务信息并汇集&#xff…...

数据结构:顺序表(C实现)

个人主页 水月梦镜花 个人专栏 C语言 ,数据结构 文章目录 一、顺序表二、实现思路1.存储结构2.初始化顺序表(SeqListInit)3.销毁顺序表(SeqListDestroty)4.打印顺序表(SeqListPrint)5.顺序表尾插(SeqListPushBack)and检查容量(SeqListCheckCapacity)6.顺序表头插(Se…...

素描基础知识

素描基础入门 1.基础线条 1.1 握笔姿势及长线条 2.排线 2.1 不同姿势画排线 2.1.1 姿势画排线 2.1.2 用手腕画排线 2.1.3 小拇指画排线 2.1.4 叠加排线 2.1.5交叉排线 2.2 纸张擦法 2.3 排线学习榜样 2.4 四种常见的排线 3、定向连线 4、一点透视 4.1 透视的规律 4.2 焦点透视…...

【Chat GPT】用 ChatGPT 运行 Python

前言 ChatGPT 是一个基于 GPT-2 模型的人工智能聊天机器人,它可以进行智能对话,同时还支持 Python 编程语言的运行,可以通过 API 接口进行调用。本文将介绍如何使用 ChatGPT 运行 Python 代码,并提供一个实际代码案例。 ChatGPT …...

cartographer发布畸变矫正后的scan数据

实现方式: 模仿源代码,在cartographer_ros写一个函数,以函数指针的方式传入cartographer后端,然后接收矫正后的scan数据,然后按照话题laserScan发布出来。 需要同时发布点云强度信息的,还要自己添加含有强度…...

Idea中git push to origin/master was rejected错误解决方案

Idea中git push to origin/master was rejected错误解决方案 问题描述解决方法 问题描述 idea开发中,需要将项目发布到gitee上,在gitee上创建仓库后,通过idea中git推送项目代码提示: push to origin/master was rejected 解决方法 gitee创建仓库时创建了README.md文件,本地…...

docker版jxTMS使用指南:自定义频率型动态管控

本文讲解4.4版jxTMS中如何自行定义一个频率型的动态管控,整个系列的文章请查看:docker版jxTMS使用指南:4.4版升级内容 docker版本的使用,请查看:docker版jxTMS使用指南 4.0版jxTMS的说明,请查看&#xff…...

【Docker】初识Docker以及Docker安装与阿里云镜像配置

目录 一、初识Docker 二、安装Docker 三、Docker架构 四、配置Docker镜像加速器 一、初识Docker Docker是一个开源的应用容器引擎,诞生于2013年,基于Go语言实现,dotCloud公司出品,Docker开源让开发者打包他们的应用以及依赖包到…...

C语言:动态内存管理

文章目录 一、动态内存函数1. malloc2. calloc3. realloc4. free 二、常见的错误1.malloc或calloc开辟的空间未检查2.越界访问3.对非malloc和calloc开辟的空间,用free释放4.对同一块动态内存多次释放5.用free释放动态内存的一部分 三、通讯录(动态版本改写)总结 一、…...

如何往MySQL中插入100万条数据?

需求 现在有一个 数据量 为100万的数据样本 100w_data.sql 其数据格式如下,截取最后十条数据 999991,XxGdnLZObA999991,XxGdnLZObA,XxGdnLZObA,2020-3-18,1 999992,TBBchSKobC999992,TBBchSKobC,TBBchSKobC,2020-9-8,2 999993,rfwgLkYhUz999993,rfwgLkYhUz,rfwgLk…...

IntelliJ IDEA 2023.2 最新变化

主要更新 AI Assistant 限定访问 Ultimate 在此版本中,我们为 IntelliJ IDEA 引入了一项重要补充 – AI Assistant。 AI Assistant 当前具备一组由 AI 提供支持的初始功能,提供集成式 AI 聊天,可以完成一些任务,例如自动编写文档…...

1300*B. T-primes

解析&#xff1a; 有且只有三个因数&#xff0c;当且仅当&#xff0c;完全平方数并且sqrt&#xff08;n&#xff09;为素数 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N1e55; ll t,n; bool prime(ll x){if(x<2) return 0;for(int…...

重新C++系列之运算符重载

一、什么是运算符重载 简单来讲就是对运算符赋予新的意义&#xff0c;但是又不能改变原有的含义&#xff0c;它本身也就是一个函数。运算符重载的本质是以函数的方式来体现。 二、运算符重载有几种 1、按照作用域来划分&#xff0c;有全局操作符重载函数和成员函数操作符重载函…...

kotlin异常处理try-catch-finally

kotlin异常处理try-catch-finally fun main(args: Array<String>) {try {println("a")} catch (e: Exception) {//异常捕获println("a-catch: $e")} finally {//善后&#xff0c;无论是否异常&#xff0c;都会执行println("a-finally")}t…...

Pytorch在cuda、AMD DirectML和AMD CPU下性能比较

一、测试环境 CUDA环境: i7-8550u 16G DDR4 2133MHz nVidia MX150 2GB AMD DirectML环境: Ryzen 5 5600G 32G DDR4 3200MHz Vega7 4GB AMD 纯CPU环境&#xff1a;Ryzen 5 5600G 32G DDR4 3200MHz 其他硬件配置的硬盘、电源均一致。Pytorch版本为2.0.0&#xff0c;Pyt…...

哈工大计算机网络课程局域网详解之:交换机概念

哈工大计算机网络课程局域网详解之&#xff1a;交换机概念 文章目录 哈工大计算机网络课程局域网详解之&#xff1a;交换机概念以太网交换机&#xff08;switch&#xff09;交换机&#xff1a;多端口间同时传输交换机转发表&#xff1a;交换表交换机&#xff1a;自学习交换机互…...

Jenkins Pipeline的hasProperty函数

函数的作用 用于判断某个参数或者字段是否存在。 用法 例子一 def projectStr "P1,P2,P3" pipeline {agent anyparameters {extendedChoice(defaultValue: "${projectStr}",description: 选择要发布的项目,multiSelectDelimiter: ,,name: SELECT_PROJ…...

芯片制造详解.净洁室的秘密.学习笔记(三)

这是芯片制造系列的第三期跟学up主三圈&#xff0c;这里对其视频内容做了一下整理和归纳&#xff0c;喜欢的可以看原视频。 芯片制造详解03&#xff1a; 洁净室的秘密&#xff5c;为何芯片厂缺人&#xff1f; 芯片制造详解.净洁室的秘密.学习笔记 三 简介一、干净的级别二、芯片…...

可解释的 AI:在transformer中可视化注意力

Visualizing Attention in Transformers | Generative AI (medium.com) 一、说明 在本文中&#xff0c;我们将探讨可视化变压器架构核心区别特征的最流行的工具之一&#xff1a;注意力机制。继续阅读以了解有关BertViz的更多信息&#xff0c;以及如何将此注意力可视化工具整合到…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...