变量
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>
...
我有越来越多的表并重构代码,例如在这种情况下,重命名变量可能会导致编译器未检测到的错误。
您的问题可以通过包装
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
,这可能会导致一些性能缺陷。