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