【问题标题】:Typescript: type '{}' has no index signature打字稿:类型“{}”没有索引签名
【发布时间】:2018-12-15 07:25:40
【问题描述】:

我想编写一个函数来用一系列值替换模板中的字段。字符串模板中的字段格式为{keyname}。代码如下:

function replaceAll(template:string, values:object) {
  Object.keys(values).map((e) => {
    const key = new RegExp("{" + e + "}", "g");
    template = template.replace(key, values[e]);  //xxx
  });
  return template;
}

let result = replaceAll("the {q} brown {f}...", { q: "quick", f: "fox"});

很遗憾,这段代码无法编译。在values[e]@xxx,它给出:

元素隐式具有“any”类型,因为类型“{}”没有索引签名。

(参数)值:对象

错误消息是什么意思,我该如何解决?

【问题讨论】:

  • object 不是indexable type,所以values[e] 被输入为any
  • values 应该是一个字典或一个数组,而不仅仅是一个对象。

标签: typescript


【解决方案1】:

您可以使用以下类型:{ [key: string]: string },自然将string 更改为可以分别作为键和值传入的任何内容。

您收到错误消息是因为当您访问对象的值时,它不知道它应该是什么类型,因此隐含为 any。当然,您仍然可以有一个 明确 any 的值,但您仍然需要使用类似于我给出的示例的东西。

【讨论】:

  • { [key: string]: string} 中的方括号是什么意思?
  • @OldGeezer 键是字符串,值也是。
  • 我的意思是方括号不是用来表示数组的吗?
  • @OldGezer 它是一个对象。这就是键的表示方式,因为数组不能是键,而文字“字符串”可以。
猜你喜欢
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 2021-05-20
  • 2018-09-05
  • 2022-01-26
  • 2021-12-07
相关资源
最近更新 更多