TypeScript19:索引器

一、索引器

索引器:对象值,使用成员表达式。

1. js 中的索引器

javascript 复制代码
const obj = {
  name: "张三",
  age: 18,
  "my-height":185
}
for (const key in obj) {
  console.log(obj[key]);
}
// 张三
// 18
// 185

2. es6 中的索引器

javascript 复制代码
const methodName = "sayHello"
class User { 
  constructor(
    public name: string,
    public age: number
  ) { }
  [methodName]() {
    console.log("hello");
  }
}
const u = new User("张三", 18)
u[methodName]() // hello

3. TS 中的索引器

在 TS 中,默认情况下,不对索引器(成员表达式)做严格的类型检查。

此时虽然 User 类中并没有 pid 属性,但是也不会进行报错。

如果想要开启严格的类型检查,需要在 ts.config.js 文件中进行配置:将 noImplicitAny 设置为 true ,开启对隐式 any 的类型检查。

隐式any: TS 根据实际情况推导出的 any 类型。

**索引器的使用:**在索引器中,键的类型可以是字符串,也可以是数字。

在类中,索引器书写的位置应该是所有成员之前。

javascript 复制代码
class User { 
  [prop:string]:any
  constructor(
    public name: string,
    public age: number
  ) { }
}
const u = new User('张三', 18)
u["pid"]= 1
console.log(u["pid"]) // 1
u.pid = "5s"
console.log(u["pid"]) // 5s

将 MyArray 类中的属性为 0 的项赋值为 1 :

javascript 复制代码
// index.ts
class MyArraay { 
  0 = 1
}

// 编译后的index.js
var MyArraay = /** @class */ (function () {
    function MyArraay() {
        this[0] = 1;
    }
    return MyArraay;
}());

TS 中索引器的作用:

  • 在严格的检查下,可以实现为类动态增加成员;
  • 可以实现动态的操作类成员;
javascript 复制代码
class MyArraay { 
  [index:number]:any
  0 = 1
  1 = "asd"
}
const my = new MyArraay()
my[5] = "张三"
console.log(my); // MyArraay { '0': 1, '1': 'asd', '5': '张三' }

二、数字索引器

javascript 复制代码
const a: any = {}
a[0] = 1
console.log(a); // { '0': 1 }
a["0"] = "3"
console.log(a); // { '0': '3' }

在 JS 中,所有的成员名本质上,都是字符串,如果使用数字作为成员名,会自动转换为字符串。

在 TS 中,如果某个类中使用了两种类型的索引器,要求两种索引器的值类型必须匹配。

相关推荐
麦麦麦当劳大王1 小时前
【油猴脚本】Boss直聘 岗位职责复制
开发语言·前端·javascript
starzy19901 小时前
深入理解Scala Map:从实现原理到工程实践
开发语言·后端·scala
小lu飞2 小时前
2026小红书小工具怎么制作:纯前端 ZIP 打包、沙箱限制与笔记挂载流程
前端·笔记·ai·ai编程
只睡四小时2 小时前
Three.js Sub-tick:漏判 60.7%→0
开发语言·javascript·性能优化·ecmascript·游戏开发·three.js·碰撞检测
smallcelebration2 小时前
151 从0开始搭建后端项目
前端·firefox
wangruofeng2 小时前
手机和电脑传文件,除了微信还有 LocalSend
前端
码农小河663 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
excel3 小时前
基于 GPT 的自动发布文章接口方案:从一句话或一张图片生成并发布内容
前端·javascript·后端
东鹏特饮5 小时前
系统运维(传统/通用运维)面试题
开发语言·php
其实防守也摸鱼5 小时前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全