【问题标题】:Dynamic key with paramaters in TypescriptTypescript中带参数的动态键
【发布时间】:2020-08-03 04:30:32
【问题描述】:

我有一个这样的对象

const SUMs = {
sum_1: {},
sum_2:{},
sum_3:{},
sum_4:{}
}

现在我想通过这样的循环范围访问它

for (let i of [1,2,3,4]){
 const key = `sum_${i}`
 const sum = SUMs[key]
}

但它不起作用,那么在这种情况下有什么解决方案可以帮助我吗? 谢谢!

【问题讨论】:

  • 怎么不工作了?有任何错误信息吗?
  • @VLAZ "'string' 类型的参数不能分配给类型参数" 这是错误消息
  • @ThanhHải,考虑向SUMs 添加类型注释,以提示编译器您正在做的事情是可以的(例如const SUMs: { [key: string]: {} } = ...)。
  • @miqh 很好,它有效,非常感谢

标签: typescript object dynamic key


【解决方案1】:

有两种可能的解决方法:

  1. 扩大SUMS的类型

如果您不提供注释,Typescript 会推断 SUMS 的类型:

{
    sum_1: {};
    sum_2: {};
    sum_3: {};
    sum_4: {};
}

您可以改为将此类型扩展为{[key: string]: {}},这将允许您使用SUMs[string] 访问此处的项目

  1. 您可以改为键入 assert your key,如下所示:
for (let i of [1, 2, 3, 4]) {
  const key = `sum_${i}`;
  const sum = SUMs[key as keyof typeof SUMs]; // you're asserting that `key` can only be keys of the `SUMs` object

  console.log(sum);
}

可以说(2)是更正确的方法

【讨论】:

    猜你喜欢
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多