Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.2k views
in Technique[技术] by (71.8m points)

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

image.png

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

但是为何必须这样呢?

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

测试例子


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...