TypeScript 对象key为number时的坑

news2024/10/7 10:21:23

首先在js的对象中有一个设定,就是对象的key可以是字符串,也可以是数字。

不论key是字符串还是数字,遍历对象key的时候,这个key会变成字符串

通过[] 操作符访问key对应值时候,不论是数字还是字符串都转成了 字符串的key 进行访问

上一段js代码:

let obj = {}
for(let key of [1,2,3]){
    obj[key] = "xxx"
}

for(let key in obj){
    console.log(typeof key)
}

let key1 = '2'
console.log(obj[key1])

let key2 = 2
console.log(obj[key2])

输出结果是:

可以看到 obj[key] = "xxx" 赋值的时候,确实key是number

但是遍历key的时候,打印出的类型是string

后面通过key1(string)和key2(number)访问元素,都是可以的

改成ts代码如下

type key_val  = {
    [key:number]:string
}

let obj:key_val = {}
for(let key of [1,2,3]){
    obj[key] = "xxx"
}

for(let key in obj){
    console.log(typeof key)
}

let key1 = '2'
console.log(obj[key1])

let key2 = 2
console.log(obj[key2])

这段代码就过不去,ts编译会报错(但是编辑时候的代码提示没法报错

 key1是string时候是不行的,必须要求是number

 

然后,有趣的事情来了

这样遍历对象,打印的key类型确实是string,但是这个时候ts就不会报错,意思是不显式声明key的类型,就可以访问了

为什么说不显示声明就可以,比如刚才代码稍加改动,访问时候给key显式得变成string了,然后就报错了

 

当然,这些都可以理解,毕竟是编译成js在运行,这里只是ts套壳类型的时候编译报错

比如刚才的代码编译成js文件是这样:

然后直接运行编译后的js是没有问题的 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chromedriver安装教程

第一步 查看你当前Chrome浏览器的版本,如下图所示: 第二步 查看当前Chrome浏览器的版本号,如下图所示,版本 108.0.5359.125(正式版本) (64 位)中的,108就是我们的版本号。 第三…

VTK-PointPlacer

前言:本博文主要研究VTK中点转换到曲面上的应用,相关的接口为vtkPolygonalSurfacePointPlacer,为深入研究将基类vtkPointPlacer开始讲解。主要应用为在PolyData表面进行画线。 vtkPointPlacer 描述:将2D display位置转换为世界坐…

ospf知识点汇总

OSPF : 开放式最短路径优先协议使用范围:IGP 协议算法特点: 链路状态型路由协议,SPF算法协议是否传递网络掩码:传递网络掩码协议封装:基于IP协议封装,协议号为 89一.OSPF 特点1.OSPF 是一种典型…

基于javaweb(springboot+mybatis)网上酒类商城项目设计和实现以及文档报告

基于javaweb(springbootmybatis)网上酒类商城项目设计和实现以及文档报告 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏…

【Linux】Linux项目自动化构建工具—make/Makefile

目录一.什么是make/MakefileMakefilemake二.Makefile逻辑1.简单依赖2.复杂依赖三.make指令1.make的使用2.clean清理3.伪目标4.make如何确定是否编译访问时间的影响修改时间的影响一.什么是make/Makefile Makefile 在Windows下,我们使用VS、VS Code这些ide编写C/C程…

MySQL的客户端/服务器架构

以我们平时使用的微信为例,它其实是由两部分组成的,一部分是客户端程序,一部分是服务器程序。客户端可能有很多种形式,比如手机APP,电脑软件或者是网页版微信,每个客户端都有一个唯一的用户名,就…

赶紧收藏 | 50个超实用微信小程序,巨好用|||内含免费配音软件

现在App太多了,想用的功能都要下载,但是手机有258g内存不允许这么放肆呀,只能挖掘不占用存的方法了,小程序就解决了这个痛,节省内存,让手机不再卡顿,打游戏也舒服.给大家整理了50个很好用的小程…

【阶段三】Python机器学习11篇:机器学习项目实战:KNN(K近邻)回归模型

本篇的思维导图: 项目实战(KNN回归模型) K近邻算法回归模型则将离待预测样本点最近的K个训练样本点的平均值进行待预测样本点的回归预测。 项目背景 K近邻除了能进行分类分析,还能进行回归分析,即预测连续变量,此时的KNN称为K近邻回归模型。回归问题是一类…

synchronized 重量级锁分析

synchronized 重量级锁分析 1. 背景 在JDK1.6以前,synchronized 的工作方式都是这种重量级的锁。它的实现原理就是利用 kernel 中的互斥量,mutex。主要是内核中的mutex 能够保证它是一个互斥的量。如果线程1拿到了 mutex,那么线程2就拿不到了。这是内核帮我们保证…

二十三、Kubernetes中Pod控制器分类、ReplicaSet(RS)控制器详解

1、概述 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建 控制器创建的pod:kub…

小米应用商店APP侵权投诉流程

目录一、官方指引二、侵权投诉流程1.侵权投诉通知和反通知流程2.受理渠道3.权利人发起侵权通知邮件一、官方指引 https://dev.mi.com/distribute/doc/details?pId1142 二、侵权投诉流程 1.侵权投诉通知和反通知流程 2.受理渠道 对外邮箱:developerxiaomi.com …

云呐|固定资产盘点APP

如果工人想做好他们的工作,他们想做好他们的工作。目前,行政事业单位对固定资产管理进行一物一卡一码管理,根据条形码粘贴和扫码总结,是目前科学完善的总结方法,具有快速、高效、准确的特点。对于这种方法,…

5.6、TCP超时重传时间的选择

超时重传时间的选择是 TCP 最复杂的问题之一 1、超时重传时间RTO的选取 假设主机 A 给主机 B 发送 TCP 数据报文段 000,并记录下当前的时间 主机 B 收到后,给主机 A 发送相应的确认报文段 主机 A 收到确认报文段后,记录下当前的时间 那么…

为什么BI仪表板的共享功能对企业如此重要?

随着大数据的发展,企业逐渐将数据作为其决策的重要组成部分,共享商业智能 (BI) 仪表板显得越来越重要。例如,在员工之间共享BI仪表板,不仅可以做出更好的数据驱动决策,还可以更好地提高工作透明度和问责制,…

Golang时间处理容易踩坑,小心损失百万

简介 在各个语言之中都有时间类型的处理,因为这个地球是圆的(我仿佛在讲废话),有多个时区,每个时区的时间不一样,在程序中有必要存在一种方式,或者说一种类型存储时间,还可以通过一系…

手写RPC框架第8版-通过SpringBoot-Starter接入SpringBoot

源代码地址:https://github.com/lhj502819/IRpc/tree/v9 系列文章: 注册中心模块实现路由模块实现序列化模块实现过滤器模块实现自定义SPI机制增加框架的扩展性的设计与实现基于线程和队列提升框架并发处理能力框架容错性相关设计通过SpringBoot-Starte…

LayoutInflater学习(二)之创建布局View

这篇是在上篇的基础上继续学习LayoutInflater,上篇主要讲了LayoutInflater是怎么解析布局的,但是并没有去仔细地说明LayoutInflater创建View的过程,这篇就补上这部分。 LayoutInflater创建xml布局View是分开创建的: 1. 先创建xml布局最外层的View,也就是布局的根View 2. 递归…

package.json和package-lock.json的区别

前言 今天正在写代码,同学突然问我,package.json和package-lock.json有什么区别,这两个文件有什么用?我愣住了… 模块化开发 经过这么多年的发展,现在的前端开发基本上都是模块化开发了。而node和npm则可以很方便的…

电网调频及一次调频、二次调频

电网调频的基本概念电力系统运行的主要任务之一是对电网频率进行控制—控制电网频率在50Hz附近的一个允许范围内。电网频率偏离额定值50Hz的原因是能源侧(水电、火电、核电……)的供电功率与负荷侧的用电功率之间的平衡被破坏而引起的。负荷的用电功率是…

Sentinel热点参数限流

何为热点? 何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K数据,并对其访问进行限制。比如: 1)商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制&am…