0

我正在使用SyncFusion Grid并且我valueAccessor为特定列定义了如下:

export interface GridColumn<idT> {
  ...
  valueAccessor?: (
    field: string,
    data: GridData<idT>,
    column: Column
  ) => ValueAccessor | string;
}

这是列定义:

{
     field: 'decimalCount',
     headerText: 'Decimals',
     textAlign: GridTextAlign.Center,
     headerTextAlign: GridTextAlign.Center,
     width: 50,
     editType: GridEditType.NumericTextBox,
     valueAccessor: (
        field: string,
        data: Partial<CustomDataGridData>
     ): string => data[field] ?? 'N/A',
}

但我收到以下错误

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Partial<CustomDataGridData>'.
No index signature with a parameter of type 'string' was found on type 'Partial<CustomDataGridData>'.

html文件valueAccessor中应用如下:

<e-column
    ...
    [valueAccessor]="column.valueAccessor ?? null"
>

我已经设法通过将data对象转换为any=>来解决这个问题,(data as any)[field] ?? 'N/A'并且任何事情都按预期工作,但我无法理解原因。

4

3 回答 3

0

从共享代码片段中,我可以看到您已为 data 参数设置了自定义类型,并且错误显示数据中返回的“字符串”类型值不存在于该自定义界面中。因此,对于这种情况,请直接将数据类型设置为 Object,如下面的代码片段所示,

{field: 'decimalCount', valueAccessor: (field: string, data: Object): string => data[field] ?? 'N/A'}

有关通过 TS 方式为 Angular Grid 列定义值访问器的更多详细信息,可以在以下文档链接中查看,

文档: https ://ej2.syncfusion.com/documentation/grid/columns/#valueaccessor

请找到以下基于此准备的示例供您参考,

示例: https ://stackblitz.com/edit/angular-8azapo-z2qdpl?file=app.component.ts

于 2021-10-26T13:01:11.397 回答
0

我设法通过直接使用字段名称来解决这个问题:

valueAccessor: (_,data: Partial<CustomDataGridData>): string | number => data.decimalCount ?? 'N/A',
于 2021-10-26T16:13:54.757 回答
0

使用值访问器函数,Grid 直接将数据作为 Object 类型返回,因为字段类型是匿名的。这可以在下面的 API 文档链接中检查,

API: https ://ej2.syncfusion.com/documentation/api/grid/valueAccessor/

但是在共享代码中可以看出,您已经为示例级别中的值访问器函数数据定义了自定义类型(数据:GridData)。这将导致上述问题,因为从 Grid 返回的 Object 类型的数据将与此自定义类型不匹配。

因此,您可以通过在示例级别 GridColumn 接口中将数据类型设置为 Object 来解决此问题,如下面的代码片段所示,

export interface GridColumn<idT> { ...
valueAccessor?: (
    field: string,
    data: Object,
    column: Column
) => ValueAccessor | string; }
于 2021-11-03T11:13:52.817 回答