TypeScript之索引签名

1. 索引签名

在 TypeScript 中,索引签名是一种定义对象类型的方式,它允许我们使用字符串或数字作为索引来访问对象的属性。

索引签名最主要的作用就是允许我们动态地添加或访问对象的属性,通过使用索引签名,我们可以在编译时无法确定具体属性名称的情况下,仍然能够安全地操作对象的属性

2. 定义索引签名

索引签名通过以下语法进行定义:

数字索引签名

{
	[index: string]: type
}

字符串索引签名

{
	[index: number]: type
}

index表示索引的名称,字符串索引签名的index就类似对象的键,数字索引签名index就类似数组的索引下标,当然index的类型也可以定义为any

type表示索引对应的值的类型,可以是any | number | string | symbol

3. 索引签名的使用

下面我们通过实例来体会索引签名的使用:

字符串索引签名

interface MyString {
    [index: string]: string
}

const str: MyString = {}
console.log(str);  // {}
// 使用索引签名的方式添加对象属性
str['name'] = 'zhangsan'
// 使用索引签名的方式访问对象属性
console.log(str['name']);  // zhangsan

数字索引签名

interface MyNumber {
    [index: number]: string
}

const num: MyNumber = {}
console.log(num);  // {}
num[0] = 'zhangsan'
console.log(num[0]);  // zhangsan

值得注意的是,接口往往会约束对象变量所定义时的属性,而当使用索引签名并且接口内只定义了使用索引签名的属性时,使用此接口的对象变量可以定义为空,如上代码所示

4. 注意事项

当类型不匹配时,会报错
在这里插入图片描述
索引签名的顺序问题,对同一个属性多次赋值时,最后一次赋值将覆盖之前的值
在这里插入图片描述
可以使用readonly修饰符来限制索引签名的可写性
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构和算法——图结构

图是一种数据结构; 图 有向图 带权图 邻接矩阵 邻接表相较于邻接矩阵,减少了存储空间; 邻接表 图的深度优先遍历(DFS) 图的广度优先遍历(BFS) 代码: import java.util.ArrayList; import java.util.Arrays; import java.util.L…

图论06-【无权无向】-图的遍历并查集Union Find-力扣695为例

文章目录 1. 代码仓库2. 思路2.1 UF变量设计2.2 UF合并两个集合2.3 查找当前顶点的父节点 find(element) 3. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 思路 2.1 UF变量设计 parent数组保存着每个节点所指向的父节点的索引,初始值为…

改善游戏体验:数据分析与可视化的威力

当今,电子游戏已经超越了娱乐,成为一种文化现象,汇聚了全球数十亿的玩家。游戏制作公司正采用越来越复杂的技术来提高游戏质量,同时游戏数据分析和可视化工具变得不可或缺。 数据的力量:解析游戏体验 游戏制作涉及到大…

BadNets:基于数据投毒的模型后门攻击代码(Pytorch)以MNIST为例

加载数据集 # 载入MNIST训练集和测试集 transform transforms.Compose([transforms.ToTensor(),]) train_loader datasets.MNIST(rootdata,transformtransform,trainTrue,downloadTrue) test_loader datasets.MNIST(rootdata,transformtransform,trainFalse) # 可视化样本 …

关于本地项目上传到gitee的详细流程

如何上传本地项目到Gitee的流程: 1.Gitee创建项目 2. 进入所在文件夹,右键点击Git Bash Here 3.配置用户名和邮箱 在gitee的官网找到命令,注意这里的用户名和邮箱一定要和你本地的Git相匹配,否则会出现问题。 解决方法如下&…

【机器学习合集】泛化与正则化合集 ->(个人学习记录笔记)

文章目录 泛化与正则化1. 泛化(generalization)2. 正则化方法2.1 显式正则化方法显式正则化方法对比提前终止模型的训练多个模型集成Dropout技术 2.2 参数正则化方法2.3 隐式正则化方法方法对比 泛化与正则化 1. 泛化(generalization) 泛化不好可能带来的问题 模型性能不稳定容…

VNC图形化远程连接Ubuntu服务器

我的Ubuntu版本22.04.3,带有gnome图形桌面。配置过程参考了几篇博客,大致流程如下。因为是配置完之后才整理的流程,可能有疏漏。 Ubuntu服务器上的配置 1.先在服务器上下载vnc server(任何一种版本均可) vncserver有…

【管理运筹学】第 10 章 | 排队论(4,系统容量有限制和顾客源有限的情形)

文章目录 引言一、系统的容量有限制( M / M / 1 / N / ∞ M/M/1/N/\infty M/M/1/N/∞)二、顾客源为有限的情形( M / M / 1 / ∞ / m M/M/1/\infty/m M/M/1/∞/m)写在最后 引言 了解了标准的 M / M / 1 M/M/1 M/M/1 模型后&#…

【Java集合类面试二十四】、ArrayList和LinkedList有什么区别?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:ArrayList和LinkedList有…

k8s的coreDNS添加自定义hosts

1.ack的hosts不会继承宿主机的hosts,而工作中有一个域名默认是走内网解析,内网被限制访问了,只能在coreDNS中加一个hosts解析域名 2.编辑configmap (coredns) kubectl edit configmap -n kube-system coredns 增加hosts节点 Corefile: |.:53…

PDF 文档处理:使用 Java 对比 PDF 找出内容差异

不论是在团队写作还是在个人工作中,PDF 文档往往会经过多次修订和更新。掌握 PDF 文档内容的变化对于管理文档有极大的帮助。通过对比 PDF 文档,用户可以快速找出文档增加、删除和修改的内容,更好地了解文档的演变过程,轻松地管理…

html 常见兼容性问题

目录 前言: 用法: 代码: 1. 盒模型差异: 2. 表格布局问题: 3. 浏览器前缀问题: 4. 字体渲染问题: 理解: 讨论: 前言: 在Web开发中,兼容性问题是常见的挑战之一。不同的浏览器和设备可能以不同的方式解释和呈现HTML,导致网页在某些环境下出现问题…

第12章 PyTorch图像分割代码框架-1

从本章开始,本书将会进行深度学习图像分割的实战阶段。PyTorch作为目前最为流行的一款深度学习计算框架,在计算机视觉和图像分割任务中已经广泛使用。本章将介绍基于PyTorch的深度学习图像分割代码框架,在总体框架的基础上,基于PA…

Fabric.js 讲解官方demo:Stickman

本文简介 戴尬猴,我是德育处主任 Fabric.js 官网有很多有趣的Demo,不仅可以帮助我们了解其功能,还可以为我们提供创意灵感。其中,Stickman是一个非常有趣的例子。 先看看效果图 从上图可以看出,在拖拽圆形时&#xf…

yyds,Elasticsearch Template自动化管理新索引创建

一、什么是Elasticsearch Template? Elasticsearch Template是一种将预定义模板应用于新索引的功能。在索引创建时,它可以自动为新索引应用已定义的模板。Template功能可用于定义索引的映射、设置和别名等。它是一种自动化管理索引创建的方式&#xff0…

CSDN学院 < 华为战略方法论进阶课 > 正式上线!

目录 你将收获 适用人群 课程内容 内容目录 CSDN学院 作者简介 你将收获 提升职场技能提升战略规划的能力实现多元化发展综合能力进阶 适用人群 主要适合公司中高层、创业者、产品经理、咨询顾问,以及致力于改变现状的学员。 课程内容 本期课程主要介绍华为…

非侵入式负荷检测与分解:电力数据挖掘新视角

电力数据挖掘 概述案例背景分析目标分析过程数据准备数据探索缺失值处理 属性构造设备数据周波数据模型训练 性能度量推荐阅读 主页传送门:📀 传送 概述 摘要:本案例将根据已收集到的电力数据,深度挖掘各电力设备的电流、电压和功…

03.MySQL事务及存储引擎笔记

事务 查看/设置事务 select autocommit; --查看当前数据库的事务状态,1表示开启,0表示关闭 set autocommit 0; --关闭自动事务提交采用关闭自动事务提交我们就可以手动进行事务提交,但是这种设置方式是对整个数据库起作用,一些可…

MongoDB 的集群架构与设计

一、前言 MongoDB 有三种集群架构模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。 Master-Slaver 是一种主从复制的模式,目前已经不推荐使用。Re…

互联网产品说明书指南,附撰写流程与方法

产品说明书,对于普通产品而言,再常见不过。药物、电器、电子产品等产品在正式出售时,往往都会附带一份产品说明书,以此告诉用户这个产品的功能与特性,并指导用户如何来使用这个产品。 产品说明书 那么,对于…