我们有多个带有数据网格的页面,共享基本功能--分页、排序、导出.为了简化它们并加快开发速度,我想创建BaseGrid
抽象组件,它将提供上述功能.
现在,为了处理出口,我们在每一行都有复选框.为了避免使用SelectionModels(如来自Angular CDK)或任何其他助手数组,我希望使用简单的布尔属性isSelected扩展数据网格DTO.然后,我们可以只使用[(ngModel)]
个和三个短函数来处理 Select .
在抽象类中指定data
属性的类型时,有什么方法可以做到这一点吗?
// Whatever kind of DataDTO the BaseGrid gets, I want to extend it with isSelected property
interface DATA_EXPORT_EXTENDER {
isSelected: boolean;
}
@Directive()
export abstract class BaseGridComponent<T> implements OnDestroy {
// Grid DTO provided as a Generic
data: Array<DATA_EXPORT_EXTENDER extends T> = [];
/*
SHOWS FOLLOWING ERROR:
Parsing error: '?' expected.eslint
Public property 'data' of exported class has or is using private name ''.ts(4031)
interface DATA_EXPORT_EXTENDER
*/
}
我没想到这会奏效,当然,它也没有奏效.但是,真的有办法做到这一点吗?我不得不求助于data: Array<any> = [];
,否则在循环时,data.isSelected
会抛出一个错误:does not exists on type T.