Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >TypeScript-可选属性和索引签名

TypeScript-可选属性和索引签名

原创
作者头像
杨不易呀
发布于 2023-09-28 11:04:09
发布于 2023-09-28 11:04:09
3200
举报
文章被收录于专栏:杨不易呀杨不易呀

前言

本章节要介绍的内容为 TS 接口当中的可选属性和索引签名,如果要想先了解可选属性和索引签名之前首先要来介绍一下接口的注意点,接口的注意点就是如果你使用了接口类型来限定了函数的入参,限定了某个变量,这个时候你调用函数或者使用变量的时候就必须和接口里面的限定一模一样,例如之前我们接口当中有 firstNamelastName 那么你调用函数给入参的时候入参的参数当中就必须包含该两个参数,那么如何来验证一下我所说的这一点内容呢,其实很简单,直接上代码即可如下代码是正常情况下的代码:

代码语言:typescript
AI代码解释
复制
interface FullName {
    firstName: string
    lastName: string
}

function say({firstName, lastName}: FullName): void {
    console.log(`我的姓名是: ${firstName}_${lastName}`);
}

say({firstName: "BN", lastName: "Tang"});
  • 然后继续来改造一下如上的代码,我们将 lastName 不给了,来看看会发生什么情况:
image-20211127174335112
image-20211127174335112
  • 发现直接就是报错了,那么我们将 lastName 给加上并且还多给一个 middleName 来看看是不是如上所说的 只能是接口当中限定的一模一样
image-20211127174557443
image-20211127174557443
  • 经过如上的演示之后就可以证明我说的是没有问题的,然后我再来进行总结一下如上的注意点的即可

接口注意点

如果使用接口来限定了变量或者形参, 那么在给变量或者形参赋值的时候, 赋予的值就必须和接口限定的一模一样才可以, 多一个或者少一个都不行

好了经过了介绍了如上的注意点了之后就可以来看本章节的内容了,但是有时在企业开发中可以多一个也有可能少一个,那么少一个或少多个怎么做,那么这个时候就可以利用 可选属性 来进行完成了,首先来提一个需求来引出该示例,改造一下接口的限定内容,添加一个 middleName, 如果在调用函数时传入的形参当中有 middleName 我就输出接口当中完整的内容,否则就输出 firstName,和 lastName,改造之后的代码如下:

代码语言:typescript
AI代码解释
复制
interface FullName {
    firstName: string
    lastName: string
    middleName: string
}

function say({firstName, lastName, middleName}: FullName): void {
    if (middleName) {
        console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
        return;
    }
    console.log(`我的姓名是:${firstName}_${lastName}`);
}

say({firstName: "BN", lastName: "Tang", middleName: "666"});
  • 然后这个时候我们将 middleName 不传在看看:
image-20211127175618283
image-20211127175618283
  • 发现报错了,这个时候就需要利用可选属性了,在需要进行可选的属性的接口限定当中添加一个 ? 即可:
image-20211127175725306
image-20211127175725306
  • 如上所看的是少一个的情况,接下来来看看少多个的情况,只需要在可选的属性接口限定当中添加一个 ? 即可如下:
代码语言:typescript
AI代码解释
复制
interface FullName {
    firstName: string
    lastName?: string
    middleName?: string
}

function say({firstName, lastName, middleName}: FullName): void {
    if (middleName) {
        console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
        return;
    }
    console.log(`我的姓名是:${firstName}_${lastName}`);
}

say({firstName: "BN"});
  • 如上所看的都是少属性,接下来来看看多一个或者多多个的可选属性,多一个或者多多个其实就是绕开 TS 检查即可

方式一

  • 多一个,使用类型断言(告诉 TS 不用管我了)
image-20211127180525824
image-20211127180525824
代码语言:typescript
AI代码解释
复制
interface FullName {
    firstName: string
    lastName: string
    middleName: string
}

function say({firstName, lastName, middleName}: FullName): void {
    if (middleName) {
        console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
        return;
    }
    console.log(`我的姓名是:${firstName}_${lastName}`);
}

say({firstName: "BN", lastName: "Tang", middleName: "666", abc: "123"} as FullName);
  • 多多个
image-20211127180609406
image-20211127180609406
代码语言:typescript
AI代码解释
复制
interface FullName {
    firstName: string
    lastName: string
    middleName: string
}

function say({firstName, lastName, middleName}: FullName): void {
    if (middleName) {
        console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
        return;
    }
    console.log(`我的姓名是:${firstName}_${lastName}`);
}

say({firstName: "BN", lastName: "Tang", middleName: "666", abc: "123", 123: 123} as FullName);

方式二(不推荐使用)

  • 使用 变量
image-20211127181322141
image-20211127181322141
代码语言:typescript
AI代码解释
复制
interface FullName {
    firstName: string
    lastName: string
    middleName: string
}

function say({firstName, lastName, middleName}: FullName): void {
    if (middleName) {
        console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
        return;
    }
    console.log(`我的姓名是:${firstName}_${lastName}`);
}

let obj = {firstName: "BN", lastName: "Tang", middleName: "666", abc: "123", 123: 123};
say(obj);

方式三

  • 使用 索引签名
  • 关于什么是索引签名,本章节先不用管,下一个章节我会单独在写一篇来进行介绍
  • 首先来看看使用索引签名来处理多一个或者多多个参数的情况
image-20211127181639012
image-20211127181639012
代码语言:typescript
AI代码解释
复制
interface FullName {
    firstName: string
    lastName: string
    middleName: string,

    [propName: string]: any
}

function say({firstName, lastName, middleName}: FullName): void {
    if (middleName) {
        console.log(`我的姓名是:${firstName}_${middleName}_${lastName}`);
        return;
    }
    console.log(`我的姓名是:${firstName}_${lastName}`);
}

say({firstName: "BN", lastName: "Tang", middleName: "666", abc: "123", 123: 123, def: "def"});
end02
end02
输入图片说明
输入图片说明

最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

输入图片说明
输入图片说明

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TypeScript-索引签名和只读属性
索引签名和只读属性是TypeScript中的两个重要概念。索引签名允许您创建动态属性的对象,提高灵活性,而只读属性通过 "readonly" 关键字确保属性不可被修改,有助于保持对象的不可变性。这两个特性共同帮助开发者编写更具可维护性和类型安全性的代码
杨不易呀
2023/09/28
2310
TypeScript-索引签名和只读属性
TypeScript-接口
TypeScript 中的接口(Interface)是用于定义对象的结构和类型的强大工具。它允许开发者明确定义对象应该包含哪些属性和方法,并在代码中实现类型检查和约束。接口提高了代码的可读性、可维护性和类型安全性,促进了团队协作。通过接口,可以创建自定义类型,以适应各种复杂数据结构和对象,从而在开发过程中提供更好的代码组织和错误预防。
杨不易呀
2023/09/28
1470
TypeScript-接口
typescript笔记2 函数 类 接口
es5中方法实参和形参可以不一样,但是ts中必须一样,如需不一样可配置为可选参数 注:可选参数必须配置在最后面
路过君
2022/04/13
1.1K1
一份不可多得的TypeScript系统入门整理
函数声明(Function Declaration)和函数表达式(Function Expression)
@超人
2021/07/29
1.8K0
一份不可多得的TypeScript系统入门整理
TypeScript高级类型备忘录(附示例)
TypeScript 是一种类型化的语言,允许你指定变量的类型,函数参数,返回的值和对象属性。
刘小夕
2020/09/15
8890
3、你能读得懂的TypeScript教程之函数
如果你指定了返回类型为void,却偏偏要返回值,那是在找死,一样不会编译通过,如:
用户1272076
2019/03/27
7700
【愚公系列】2021年12月 Typescript-接口的使用
接口的作用:在面向对象OOP的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用。
愚公搬代码
2022/12/01
4980
Typescript笔记
数值类型有很不止 number, bigint也是。同时值的话可以是十进制,二进制,还可以是NaN。
踏浪
2020/11/05
5830
Typescript基础语法
typescript是一个js的超集,个人理解为包装了面向对象编程逻辑的语法糖,所以一般使用typescript的语言来编写代码,然后再使用typescript编译为原生js,这样就可以作为普通js脚本运行了。typescript语法很多地方与java类似,作为java程序员学起来不会很吃力。
歪歪梯
2020/06/19
1.5K0
1.8W字|了不起的 TypeScript 入门教程(第二版)
阿宝哥第一次使用 TypeScript 是在 Angular 2.x 项目中,那时候 TypeScript 还没有进入大众的视野。然而现在学习 TypeScript 的小伙伴越来越多了,本文阿宝哥将从 16 个方面入手,带你一步步学习 TypeScript,感兴趣的小伙伴不要错过。
阿宝哥
2020/09/16
10.3K0
1.8W字|了不起的 TypeScript 入门教程(第二版)
一篇朴实的文章带捋完TypeScript基础,方法是正反对比!
最近在抽出点业余时间学习TypeScript,虽然平时也挺忙的,但是还是想分配些时间出来。掘金这篇文章不错,于是分享给大家。
coder_koala
2019/11/09
1.1K0
TypeScript学习第六篇 - 接口的定义
在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到了一种限制和规范的作用,接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些方法,提供方法的这些类就可以满足实际需要。
越陌度阡
2020/11/26
6190
TypeScript学习笔记
1、类型注解 2、接口interface:使用interface可以申明一个类型 3、类
Tiffany_c4df
2019/12/04
6300
初探 TypeScript函数基本类型泛型接口类内置对象
前段时间有朋友和我推荐 TypeScript ,他说写起来特别爽,让我去试一试,那时候我还在那是啥高深莫测的东西。刚好那段时间忙,一直没有时间看。最近也很忙,还是抽时间来探一探 TypeScript ;简单说 ts 主要提供的是 dynamic type check,提供的 interface 接口这个功能在开发项目的时候会很有帮助。TypeScript是 JavaScript 的一个超集。他和 JavaScript 有着千丝万缕的关系。
sunseekers
2018/10/31
7.3K0
快速了解typescript语法
一个保存字符串的文本,类型声明为 string。可以发现类型声明可大写也可小写,后文同理。
用户9914333
2022/07/21
8720
从 JavaScript 到 TypeScript
TypeScript 并不是一个完全新的语言, 它是 JavaScript 的超集,为 JavaScript 的生态增加了类型机制,并最终将代码编译为纯粹的 JavaScript 代码。 TypeScript 简介 TypeScript 由 Microsoft(算上 Angular 2 的话加上 Google)开发和维护的一种开源编程语言。 它支持 JavaScript 的所有语法和语义,同时通过作为 ECMAScript 的超集来提供一些额外的功能,如类型检测和更丰富的语法。下图显示了 TypeScrip
牧云云
2018/04/28
1.5K0
从 JavaScript 到 TypeScript
TypeScript学习笔记(二)—— TypeScript基础
JavaScript 的类型分为两种:原始数据类型(Primitive data types)和对象类型(Object types)。
张果
2022/10/04
5.1K0
TypeScript学习笔记(二)—— TypeScript基础
typescript
TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。
一粒小麦
2019/07/18
2K0
typescript
03. 从TypeScript入手,驾驭HarmonyOS开发的技术风潮!-----------(下篇)
TypeScript 支持通过 getters/setters 来截取对对象成员的访问。 它能帮助你有效的控制对对象成员的访问。
全栈若城
2024/03/10
1480
03. 从TypeScript入手,驾驭HarmonyOS开发的技术风潮!-----------(下篇)
【TypeScript 4.5】003-第 3 章 常用类型
如上代码,属性 x 和 y 不一定都要传入,在可选参数后面加一个问号(?)即可实现!
訾博ZiBo
2025/01/06
830
【TypeScript 4.5】003-第 3 章 常用类型
相关推荐
TypeScript-索引签名和只读属性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文