当我使用ng serve
时,一切正常。当我使用ng serve --prod --aot
时,它抱怨Type 'any[]' cannot be used as an index type
。我找不到任何可以修复它的东西。它似乎引用的type any[]
是tags变量,因为当我将其注解掉时,一切都将编译。
下面是相关代码:
//cluster-details.component.ts
...
export class ClusterDetailsComponent implements OnInit {
infoTitles = {
edgeNodePublicDNS: 'Edge Node Public DNS',
...
tags: 'Tags'
};
infoKeys: string[];
info: any;
tags: any[];
...
this.requestsService.emrinstanceDetailsGET(body)
.subscribe(
(data) => {
this.infoKeys = Object.keys(data);
this.info = data;
...
cluster-details.component.html:
<tr *ngFor="let key of infoKeys">
<td>
<strong>{{ infoTitles[key] }}:</strong>
</td>
<td>
{{info[key]}}
</td>
</tr>
<tr>
<td>
<strong>{{ infoTitles[tags] }}:</strong>
</td>
<td>
{{tags}}
</td>
</tr>
请求返回如下数据:
.map(
(response: Response) => {
const data = response.json();
return data['clusterDetail'];
现在我知道了"不要让它成为any[]
类型,但我不知道该怎么做。返回的是一个JSON值,它只是一个Object类型。将类型更改为Object不起作用,我也看不到任何其他类型可以起作用。也许我必须为它做一个接口?“
3条答案
按热度按时间dfddblmv1#
我相信AOT在这里无法解析您的'infoTitles',因为您没有给予它一个特定的类型,而是使用了'infoTitles[key]',object[name](AOT理所当然地认为您使用的是数组语法),这导致了编译错误。
您需要创建一个类:
5m1hhzi42#
我知道了。只是我无意中误用了一个变量:
HTML行
...{{ infoTitles[tags] }}...
尝试使用tags变量索引infoTitles-我的意思是这个字符串只是“tags”,它将正确引用我需要的infoTitles值。但是我没有注意到我正在使用tags数组。所以修复应该只是使用字符串或变量,如tagIndexString = 'tags'
,然后HTML可以是...{{ infoTitles[tagIndexString] }}...
z4bn682m3#
在我的场景中,由于以下代码错误,出现了相同的错误,**'ng serve'**命令忽略了该错误:
产生错误的代码:
已更改代码以解决错误:
如果您的html代码有,请从“[[”中删除多余的“["。