如何理解TS中的 “数字索引的返回值必须是字符串索引返回值类型的子类型” ?

image.png

这句话的意思是:数字索引和字符串索引同时存在时,数字类型key对应的value必须是字符串类型key对应的vaue子类型,对吧?

但是为何必须这样呢?

给的解释JavaScript会将它转换成‘string’然后再去索引对象没理解跟上面的规定有什么关系。。

测试例子

阅读 3.7k
1 个回答

JS 的 Array 是伪数组,跟其他语言中“一段连续的内存空间”不同。

JS 里下面两种数据结构没有本质的不同(因为原型链不同导致的原型方法不同这是另一回事儿),在底层都是哈希表:

let arr = [
  'one',
  'two',
  'three'
]

let obj = {
  '0': 'one',
  '1': 'two',
  '2': 'three',
  'length': 3
}

arr[0] 当对象看的话就是就是 obj['0'],两者是一回事儿,类型当然相同。


P.S. JS 中其实也有真·数组,但不是 Array,而是 Int8ArrayUint8Array 这些 TypedArray

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题