打字稿:类型“ {}”没有索引签名

时间:2018-07-06 16:38:20

标签: typescript

我想编写一个函数来用一系列值替换模板中的字段。字符串模板中的字段的格式为{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”类型,因为类型“ {}”没有索引签名。

     

(参数)值:对象

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

1 个答案:

答案 0 :(得分:3)

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

之所以收到错误消息,是因为当您访问对象的值时,它不知道它应该是什么类型,因此是隐式的。当然,您仍然可以具有明确的值,但是您仍然需要使用类似我给出的示例的方法。