是的,有可能,答案就是泛型!
class ProjectGrid {
constructor(
private excelService: ExcelService,
private commonService: CommonService,
private gridService: GridService,
) { }
}
但请注意,所有这些子类参数仅在编译时存在typescript 动态参数,您不能在函数中执行类似于 newGridExcel() 的操作; 你需要将单独的东西传递给构造函数并将它们保存在单独的数组中; 这些可能是类本身,也可能是创建此类对象的结构函数:
class ProjectGrid {
constructor(
private excelService: ExcelService,
private commonService: CommonService,
private gridService: GridService,
private gridExcelFabric: () => GridExcel,
) { }
onFileChange(evt: any) {
/* some code */
const header = Object.getOwnPropertyNames(this.gridExcelFabric());
}
}
另一个需要注意的是,您实际上可能需要类型参数(例如 GridService )不是任意类型typescript 动态参数,而是共享一些通用属性和技术。 如果您有一个描述此通用功能的类型(例如 GridServiceBase ),您可以执行以下操作:
class ProjectGrid {}
复制
此后,您可以假设所有 GridService 类型的对象也是 GridServiceBase 类型,并且您可以使用 GridServiceBase 的方法和属性。