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

Posted

技术标签:

【中文标题】打字稿:类型“”没有索引签名【英文标题】: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 应该是一个字典或一个数组,而不仅仅是一个对象。 【参考方案1】:

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

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

【讨论】:

[key: string]: string 中的方括号是什么意思? @OldGeezer 键是字符串,值也是。 我的意思是方括号不是用来表示数组的吗? @OldGezer 它是一个对象。这就是键的表示方式,因为数组不能是键,而文字“字符串”可以。

以上是关于打字稿:类型“”没有索引签名的主要内容,如果未能解决你的问题,请参考以下文章

编译打字稿时如何防止错误“对象类型的索引签名隐式具有'任何'类型”?

打字稿中迭代的索引签名

如何使用 JSDoc 记录符号索引签名以符合打字稿?

查找累积和反应打字稿

typescript 打字稿索引签名示例

实现类中的打字稿索引签名和方法不起作用