#angular #typescript
#angular #typescript
Вопрос:
Я запускаю демонстрационное приложение.Я новичок в angulat. и ниже приведен мой компонент списка caltegory.
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { AngularGridInstance, Column, GridOption, GraphqlService, GraphqlResult, Filters, Formatters, OnEventArgs, FieldType } from 'angular-slickgrid';
import { CategoryDataService } from 'src/app/core/services/category-data.service';
import { PageService } from 'src/app/core/services/page.service';
const GRAPHQL_QUERY_DATASET_NAME = 'categories';
@Component({
templateUrl: './category-list.component.html',
styleUrls: ['./category-list.component.css']
})
export class CategoryListComponent implements OnInit {
angularGrid: AngularGridInstance;
columnDefinitions: Column[];
gridOptions: GridOption;
dataset = [];
constructor(private dataService: CategoryDataService, private router: Router, private pageService: PageService) {
}
ngOnInit(): void {
this.columnDefinitions = [
...removed
];
this.gridOptions = {
backendServiceApi: {
service: new GraphqlService(),
options: {
columnDefinitions: this.columnDefinitions,
datasetName: GRAPHQL_QUERY_DATASET_NAME
},
process: (query) => this.getCategories(),
}
};;
}
getCategories(): Observable<GraphqlResult> {
var args = this.pageService.getPageArgs(this.angularGrid);
return this.dataService.searchCategories(args)
.pipe(map(
page => {
var result: GraphqlResult = {
data: {
[GRAPHQL_QUERY_DATASET_NAME]: {
nodes: page.items, ---here i am getting error
pageInfo: {
hasNextPage: page.hasNextPage
},
totalCount: page.totalCount
}
}
};
return resu<
}));
}
}
Демонстрационный проект работал нормально раньше. и когда я обновился до последней версии slick grid, я получаю сообщение об ошибке ниже .. он показывает, что не вводит никаких…
Пожалуйста, дайте мне знать, как преобразовать общий класс в любой тип..Спасибо
И интерфейс для разбивки на страницы.
export interface IPagedList<T> {
pageIndex: number;
.... removed
items: T[];
}
Ошибка:
Тип значения вычисляемого свойства — ‘{ nodes: IProduct[]; pageInfo: {hasNextPage: boolean; }; totalCount: number; }’, которое нельзя присвоить типу ‘any[]’. Литерал объекта может указывать только известные свойства, а «узлы» не существуют в типе «any []».
Ответ №1:
В версии Angular-Slickgrid произошло небольшое критическое изменение 2.15.x
, я добавил новый тип GraphqlPaginatedResult
при использовании разбивки на страницы, а GraphqlResult
когда вы этого не делаете, он более репрезентативен для того, какой из них какой. Итак, вам просто нужно переключить свой тип на GraphqlPaginatedResult
. Я не хотел выпускать последнюю версию ( 3.x
) только для этого 1 небольшого изменения типа (и я думал, что никто не использует часть GraphQL, lol), поэтому вам нужно будет обновить свой код (просто выполните поиск замену с GraphqlResult
на GraphqlPaginatedResult
).
getCategories(): Observable<GraphqlPaginatedResult> {
Это было объяснено в журнале изменений этого выпуска.
Также, когда это изменение было сделано, я создал новый пример 27 — Graphql без разбивки на страницы, который используется GraphqlResult
, в то время как в предыдущем примере 6 — Graphql используется новый GraphqlPaginatedResult
тип.