当我使用ng serve
时,一切正常。当我使用ng serve --prod --aot
时,它会向Type 'any[]' cannot be used as an index type
投诉。我找不到任何可以修复它的东西。并且键入任何[]'它似乎指的是标签变量,因为当我将它注释掉时,所有内容都会编译。
以下是相关代码:
//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;
...
群集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'];
现在我知道“只是不打算输入任何[]&#39;但我无法弄明白该怎么做。返回的是一个JSON值,它只是一个Object类型。将类型更改为对象并不起作用,我也看不到任何其他类型的工作。也许我必须为它创建一个界面?
答案 0 :(得分:0)
我相信AOT在这里无法解析你的'infoTitles',因为你没有给它一个特定的类型但是使用'infoTitles [key]',object [name](AOT理所当然地认为你正在使用数组语法)后来导致编译错误。可能的解决方案:
infoTitles: InfoTitle = {
edgeNodePublicDNS: 'Edge Node Public DNS',
...
tags: 'Tags'
};
您需要创建一个类:
export class InfoTitle {
edgeNodePublicDNS: string;
...
tags: string;
}
答案 1 :(得分:0)
想出来。简单的错误使用我不想要的变量:
HTML行...{{ infoTitles[tags] }}...
正在尝试使用tags变量为infoTitles编制索引 - 我的意思是这是一个只是标记&#39;标记的字符串。其中它将正确引用我需要的infoTitles值。但我没有注意到我使用的是标签数组。所以修复应该使用像tagIndexString = 'tags'
这样的字符串或变量,然后HTML可以是...{{ infoTitles[tagIndexString] }}...
答案 2 :(得分:0)
在我的情况下,由于以下代码错误而导致出现相同的错误,该错误被'ng serve'命令忽略:
出现错误的代码:
{{ (myObject | async).dayList }}
更改了代码以解决错误:
<span data-toggle="tooltip" title={{subData[[col.field]]}}>{{subData[[col.field]]}}</span>
如果您的html代码具有,只需从'[['删除多余的'['。