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

如何理解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,而是 Int8ArrayUint8Array 这些 TypedArray

以上是 如何理解TS中的 “数字索引的返回值必须是字符串索引返回值类型的子类型” ? 的全部内容, 来源链接: utcz.com/a/68131.html

回到顶部