我想编写一个函数来用一系列值替换模板中的字段。字符串模板中的字段的格式为{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”类型,因为类型“ {}”没有索引签名。
(参数)值:对象
错误消息是什么意思,我该如何解决?
答案 0 :(得分:3)
您可以使用以下类型:{ [key: string]: string }
,自然地将string
更改为可以分别作为键和值传递的内容。
之所以收到错误消息,是因为当您访问对象的值时,它不知道它应该是什么类型,因此是隐式的。当然,您仍然可以具有明确的值,但是您仍然需要使用类似我给出的示例的方法。