根据此示例https://stackblitz.com/angular/lmgdevradbre?file=app%2Ftable-http-example.ts

我正在尝试使代码适应我的api的响应。但是我越来越

Type 'any[] | ConLiq' is not assignable to type '{}[]'.
  Type 'ConLiq' is not assignable to type '{}[]'.
    Property 'includes' is missing in type 'ConLiq'.

line: ).subscribe(data => this.dataSource.data = data);


为什么会这样,“包含”的属性是什么?我在数据源对象中看不到它。

该错误专门在this.dataSource.data

JSON:

[
    {
      "con": "Sonsectetur sunt",
      "con_id": 360,
    },
    {
      "con": "Oulla dolore",
      "con_id": 933,
    }
]


TS:

export class LiqConComponent implements OnInit {
    displayedColumns = ['con', 'con_id'];
    exampleDatabase: ExampleHttpDao | null;
    dataSource = new MatTableDataSource();
    isLoadingResults = true;

    @ViewChild(MatPaginator) paginator: MatPaginator;
    @ViewChild(MatSort) sort: MatSort;

    constructor(private http: HttpClient) { }

    ngOnInit() {
        this.exampleDatabase = new ExampleHttpDao(this.http);

        // If the user changes the sort order, reset back to the first page.
        this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);

        merge(this.sort.sortChange, this.paginator.page)
            .pipe(
                startWith([]),
                switchMap(() => {
                    this.isLoadingResults = true;
                    return this.exampleDatabase!.getConLiq();
                }),
                map(data => {
                    // Flip flag to show that loading has finished.
                    this.isLoadingResults = false;

                    return data;
                }),
                catchError(() => {
                    this.isLoadingResults = false;
                    return observableOf([]);
                })
            ).subscribe(data => this.dataSource.data = data); // Here I get the error
    }
}

export interface ConLiq {
    con: string;
    con_id: number;
}

export class ExampleHttpDao {
    constructor(private http: HttpClient) { }

    getConLiq(): Observable<ConLiq> {
        const json_con = api + 'conliq';

        return this.http.get<ConLiq>(json_con);
    }
}


getConLiq()返回:

{
  "_isScalar": false,
  "source": {
    "_isScalar": false,
    "source": {
      "_isScalar": false,
      "source": {
        "_isScalar": true,
        "value": {
          "url": "api address",
          "body": null,
          "reportProgress": false,
          "withCredentials": false,
          "responseType": "json",
          "method": "GET",
          "headers": {
            "normalizedNames": {},
            "lazyUpdate": null,
            "headers": {}
          },
          "params": {
            "updates": null,
            "cloneFrom": null,
            "encoder": {},
            "map": null
          },
          "urlWithParams": "api address"
        }
      },
      "operator": {
        "concurrent": 1
      }
    },
    "operator": {}
  },
  "operator": {}
}

最佳答案

您的代码中存在多个问题:


getConLiq()函数返回Observable<ConLiq>,但应为Observable<ConLiq[]>return this.http.get<ConLiq>(json_con);也是一样,应该是return this.http.get<ConLiq[]>(json_con);
MatTableDataSource是参数化类型,因此dataSource = new MatTableDataSource();行应为dataSource = new MatTableDataSource<ConLiq>();

09-25 16:48