JSON 对象的 TypeScript 键控数组缺少属性错误

TypeScript keyed array of JSON objects missing properties error

我正在开发一个 Angular 项目,在该项目中我有一个包含查询对象数组的服务。我的麻烦是编译器抱怨我的数组中缺少属性的以下错误消息,我不清楚:

  ERROR in src/app/query.service.ts:8:3 - error TS2740: Type '{ '1': Query; }' is missing the following properties from type 'Query[]': length, pop, push, concat, and 26 more.

  8   query: Query[] = {
  ~~~~~~~~~

我的代码如下。

query.service.ts:

import { Injectable } from '@angular/core';
import { Query } from './query/query.module';

@Injectable({
  providedIn: 'root'
})
export class QueryService {
    queries: Query[] = {
        '1' : new Query( {"type":"test","id":"1","data":["test---data",{"misc":["alt-url","alt-redirect","published-date","granted-approved","signed-off"],"default":"true"}]} ),
    };

  constructor() {
    console.log(this.queries);
  }
}

query.model.ts:

export class Query {
    public id: number;
    public type: string;
    public options: string;
    public sections: string;

    constructor(data: any) {
      const json_data = JSON.parse(data);
      this.id = json_data.id;
      this.type = json_data.type;
      this.options = json_data.options;
      this.sections = json_data.sections;
    }
  }

您正在将对象分配给数组类型。 您的 QueryService 查询应该具有 Record 类型而不是 Query[]:

export class QueryService {
    queries: Record<string, Query> = {
        '1' : new Query( {"type":"test","id":"1","data":["test---data",{"misc":["alt-url","alt-redirect","published-date","granted-approved","signed-off"],"default":"true"}]} ),
    };

  constructor() {
    console.log(this.queries);
  }
}

或其他方式:

queries: Query[] = [
    new Query( {"type":"test","id":"1","data":["test---data",{"misc":["alt-url","alt-redirect","published-date","granted-approved","signed-off"],"default":"true"}]} ),
];