输入'任何[]'不能用作索引类型Angular build

时间:2017-05-01 22:34:11

标签: angular typescript

当我使用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类型。将类型更改为对象并不起作用,我也看不到任何其他类型的工作。也许我必须为它创建一个界面?

3 个答案:

答案 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代码具有,只需从'[['删除多余的'['。