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

Old*_*zer 3 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"});
Run Code Online (Sandbox Code Playgroud)

不幸的是,这段代码无法编译。在values[e]xxx,它给出:

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

(参数)值:对象

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

jhp*_*ING 7

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

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