Когда я устанавливаю свой источник данных в массив и пытаюсь установить dataSource
в новую таблицу матов dataSource
, чтобы иметь возможность использовать фильтрацию, я получаю сообщение об ошибке:
Type 'MatTableDataSource' is missing the following properties from type 'TableRecord[]': length, pop, push, concat, and 24 more.
Однако, если я установлю источник данных на любой, он будет работать нормально. Может кто-нибудь, пожалуйста, помогите мне понять, почему:
сервис.тс
export interface PaginatedListResponse<TableRecord>{
length: number,
tableRows: Array<TableRecord>
}
export interface TableRecord{
x: string,
y: string,
z: boolean,
}
.тс
dataSource: TableRecord[] = [];
this.dataSource = new MatTableDataSource(response.tableRows);
//errror: Type 'MatTableDataSource<TableRecord>' is missing the following properties from type 'TableRecord[]': length, pop, push, concat, and 24 more.
рабочий пример
dataSource: any;
this.dataSource = new MatTableDataSource(response.tableRows);
//No error
потому что данные поступают из бэкэнда с разбиением на страницы. Итак, я использую наблюдаемый
Неверное объявление источника данных. Сделай это так:
dataSource: MatTableDataSource<TableRecord> = new MatTableDataSource([]) ;
Затем, когда вы получаете данные из бэкэнда:
this.dataSource.data = response.tableRows;
MatTable нужен объект типа MatTableDataSource или простой массив. Первоначально вы определили массив типа TableRecord, но попытались использовать этот массив как MatTableDataSource. Мое изменение определило его как MatTableDataSource. Одним из свойств MatTableDataSource является «данные», представляющие собой массив определяемого вами типа. «данные» всегда являются массивом, поэтому вы опускаете [] в типе источника данных. Вам не нужно сразу определять «новый MatTableDataSource ([])» - это только в том случае, если вы хотите, чтобы ему был назначен пустой массив в .data, а не весь объект был неопределенным.
По какой причине вы объявляете dataSource как
TableRecord[]
, а затем сразу переключаете его на типMatTableDataSource
?