我有一个对象,该对象具有title
作为字符串和order
作为数字,然后在其上将具有数字类型的动态属性数
所以我试图像下面这样定义它
appraisalGroups: Array<{
title: string,
order: number,
[key:string]: number,
}>;
然后将对此进行分配(这只是我的读取应用程序中的一个示例,会有一个循环,并且密钥来自其他api)
this.appraisalGroups[0]['mykey1'] = 5
我遇到了ts错误
类型为“字符串”的属性“标题”不能分配给字符串索引类型为“数字”
我的问题是如何输入?
答案 0 :(得分:2)
之所以会这样,是因为索引签名会强制所有属性匹配其返回类型。如Typescript文档所述:https://www.typescriptlang.org/docs/handbook/interfaces.html
虽然字符串索引签名是描述字典模式的强大方法,但它们也强制所有属性都与其返回类型相匹配。
索引签名基本上是告诉编译器可以通过这种方式访问此Object的属性,结果将如下所示。因此,为什么不能拥有带有返回数字的索引签名的字符串属性。您要限制Object返回给定索引的数字,该数字是字符串。
我不确定您的问题空间是什么,但是如果动态属性都具有共同点,那么创建一个接口来抽象化它们的共同点可能会更容易。您实际上如何使用所说的界面取决于您要做什么。
编辑:您也可能很厚脸皮,走捷径,仅使用Union类型。因此,您不用[key:string]: number
,而是[key:string]: number | string
。