typescript 类型“any[]”不能用作索引类型Angular 生成

ruarlubt  于 2023-01-27  发布在  TypeScript
关注(0)|答案(3)|浏览(271)

当我使用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不起作用,我也看不到任何其他类型可以起作用。也许我必须为它做一个接口?“

dfddblmv

dfddblmv1#

我相信AOT在这里无法解析您的'infoTitles',因为您没有给予它一个特定的类型,而是使用了'infoTitles[key]',object[name](AOT理所当然地认为您使用的是数组语法),这导致了编译错误。

infoTitles: InfoTitle = {
    edgeNodePublicDNS: 'Edge Node Public DNS',
    ...
    tags: 'Tags'
};

您需要创建一个类:

export class InfoTitle {
    edgeNodePublicDNS: string;
    ...
    tags: string;
}
5m1hhzi4

5m1hhzi42#

我知道了。只是我无意中误用了一个变量:
HTML行...{{ infoTitles[tags] }}...尝试使用tags变量索引infoTitles-我的意思是这个字符串只是“tags”,它将正确引用我需要的infoTitles值。但是我没有注意到我正在使用tags数组。所以修复应该只是使用字符串或变量,如tagIndexString = 'tags',然后HTML可以是...{{ infoTitles[tagIndexString] }}...

z4bn682m

z4bn682m3#

在我的场景中,由于以下代码错误,出现了相同的错误,**'ng serve'**命令忽略了该错误:

产生错误的代码:

<span data-toggle="tooltip" title={{subData[[col.field]]}}>{{subData[[col.field]]}}</span>

已更改代码以解决错误:

<span data-toggle="tooltip" title={{subData[col.field]}}>{{subData[col.field]}}</span>

如果您的html代码有,请从“[[”中删除多余的“["。

相关问题