如何使角度剑道网格类型安全

问题描述 投票:0回答:1

变量

dataItem
具有类型
any
,我猜该类型不能从绑定到
[kendoGridBinding]
Array<T>
推断出来?我需要在每列上使用类型保护或类型断言吗?

<kendo-grid [kendoGridBinding]="processTable()">
    <kendo-grid-column 
       field="qty"  <-- not type safe
       title="Qty Required"> 
    </kendo-grid-column>
    <kendo-grid-column title="Processed">
      <ng-template kendoGridCellTemplate let-dataItem>
        {{ dataItem.events.length }}  <--- not type safe
      </ng-template>
    </kendo-grid-column>
   ...

我有越来越多的表并重构代码,例如在这种情况下,重命名变量可能会导致编译器未检测到的错误。

angular kendo-grid ng-template typesafe
1个回答
0
投票

您的问题可以通过包装

let-dataItem
来解决:

而不是这个:

<kendo-grid-column title="Processed">
  <ng-template kendoGridCellTemplate let-dataItem>
    {{ dataItem.events.length }}  <--- not type safe
  </ng-template>
</kendo-grid-column>

这样做:

<kendo-grid-column title="Processed">
  <ng-template kendoGridCellTemplate let-untypedDataItem>
    <ng-container *ngIf="identity(untypedDataItem) as dataItem">
        {{ dataItem.events.length }}  <--- Now is type safe
    </ng-container>
  </ng-template>
</kendo-grid-column>
// typescript
identity(foo: any): MyType {
    return foo;
}

这或多或少与我在here给出的答案相同,您可以在那里查看其他人的方法。


使用

*ngFor
*ngIf
时,IDE 会注意到类型断言。此解决方案的缺点是,由于
*ngIf
,内部会“稍后”渲染。而且,在每个生命周期都会调用
ngZone
,这可能会导致一些性能缺陷。

© www.soinside.com 2019 - 2024. All rights reserved.