【发布时间】:2020-04-03 10:43:09
【问题描述】:
当使用let s = Symbol()将符号声明为对象的键时,如:
let a = { [s]:1 }
a 的类型会自动变为{[x:string]:number},而尝试像a[s] 这样的索引时会出错:
类型 'symbol' 不能用作索引类型 (2538)
当使用const s = Symbol() 声明时,就像{[s]:number} 一样工作。
【问题讨论】:
-
可能是this。
-
您希望
a将所有 个符号作为其键,还是仅将s指定的一个符号作为键?如果是前者,我认为这是不可能的。如果是后者,那么const可以工作,因为编译器知道它的值不会改变,所以它的推断范围更窄,而let允许它改变,所以它被推断为symbol,这会导致问题。 -
@jcalz 是后者,谢谢。只是对
symbol->key:string转换行为感到好奇
标签: typescript typescript-typings