如何理解TS中的 “数字索引的返回值必须是字符串索引返回值类型的子类型” ?
这句话的意思是:数字索引和字符串索引同时存在时,数字类型key对应的value必须是字符串类型key对应的vaue子类型,对吧?
但是为何必须这样呢?
给的解释JavaScript会将它转换成‘string’然后再去索引对象
没理解跟上面的规定有什么关系。。
测试例子
回答
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
,而是 Int8Array
、Uint8Array
这些 TypedArray
。
以上是 如何理解TS中的 “数字索引的返回值必须是字符串索引返回值类型的子类型” ? 的全部内容, 来源链接: utcz.com/a/68131.html