【问题标题】:why 'let' declaration symbol will convert to string index signature in TypeScript?为什么'let'声明符号将转换为 TypeScript 中的字符串索引签名?
【发布时间】: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


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多