【问题标题】:Typescript: destructuring an object with symbols as keys打字稿:以符号为键解构对象
【发布时间】:2019-05-28 23:50:19
【问题描述】:

为什么这段代码会产生错误Type 'symbol' cannot be used to index type '{ [x: string]: string; }'.

let symbol = Symbol()
let obj = { [symbol] : 'value'}
let { [symbol]: alias } = obj
             // ^^^^^ the error is here

console.log(alias)

最重要的是,我该如何解决这个问题?

【问题讨论】:

  • 我认为您不能将数组作为键。
  • @zahma 我也不这么认为。但这不是一个数组,而是计算道具和符号的语法。

标签: typescript destructuring


【解决方案1】:

您只需将symbol 声明为const 以使编译器为其推断文字类型,而不是一般的Symbol 类型。

const symbol = Symbol()
let obj = { [symbol] : 'value'}
let { [symbol]: alias } = obj


console.log(alias)

这个PR 可能对打字稿何时推断出一个独特的符号很有用

【讨论】:

  • 哈!很简单。和往常一样优雅。你说的很重要,但我不确定我是否理解正确。你是说letconst 产生不同的类型?这是(符号)唯一的情况吗?
  • 在这种情况下,文字类型唯一符号也是相同的概念吗?
  • @NurbolAlpysbayev 通常let x = litreral 会推断扩展类型,而const x = literal 会推断文字类型。所以let x = 'foo' x 是stringconst x = 'foo' x 被输入为'foo'
  • 有道理!有趣的是,我几乎总是使用const,但今天出于某种原因写了let,我们到了。
  • @NurbolAlpysbayev 你把const 改成let,问一个有趣的问题,我们都明白了,一切都解决了:P
猜你喜欢
  • 2019-05-28
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 2021-06-28
  • 1970-01-01
相关资源
最近更新 更多