在 Base-Class 中使用 Derived-Class 实例调用 Base-Class 方法和 Derived-class 数据
Using Derived-Class Instance Inside Base-Class to Call Base-Class Method with Derived-class Data
我有一个基础通用组件,我想从基础 class 调用派生方法,该 return 数据属于派生 class.
第一个问题是,我无法在抽象中将其定义为静态 class!
第二个问题是,当我在基本泛型 class 中使用 {} 作为 TDomain 创建派生 class 的新实例时,它的空值和方法 return 空引用错误!
基础实体是这样的:
export abstract class BaseEntity
{
abstract getColumns():string[];
}
我的模型是这样的:
export class Person extends BaseEntity
{
getColumns() {
return ["Id", "Name"];
}
}
我有一个通用基础组件:
@Component({
selector: 'base-component',
templateUrl: './base.component.html',
styleUrls: ['./base.component.css']
})
export class BaseComponent<TDomain extends BaseEntity,TService extends DataService > implements OnInit {
data:any[];
constructor() {
}
ExportToExcel(): void {
//must create an instance of derived class
//then call getcolumns method of it
let obj = {} as TDomain; // but its empty doesnt work
ExcelService.export(obj.getcolumns(this.data));
}
}
和派生组件:
@Component({
selector: 'Derived-Cmp',
templateUrl: './derived.component.html',
styleUrls: ['./derived.component.css']
})
export class DerivedComponent extends BaseCrudComponent<Person,PersonService> implements OnInit {
//ExportToExcel Method called form html
}
要创建 TDomain 的实例,您需要将 TDomain 的构造函数传递给基础 class:
export abstract class BaseEntity {
abstract getColumns(): string[];
}
export class Person extends BaseEntity {
getColumns() { return ["Id", "Name"]; }
}
export class BaseComponent<TDomain extends BaseEntity> {
data: any[];
constructor(public ctor: new () => TDomain) {
}
ExportToExcel(): void {
let obj = new this.ctor(); // create instance using the constructor
obj.getColumns(); /// call method
}
}
export class DerivedComponent extends BaseComponent<Person> {
constructor() {
super(Person)
}
}
link 表单 github 存储库 call derived class method inside base generic class
我有一个基础通用组件,我想从基础 class 调用派生方法,该 return 数据属于派生 class.
第一个问题是,我无法在抽象中将其定义为静态 class!
第二个问题是,当我在基本泛型 class 中使用 {} 作为 TDomain 创建派生 class 的新实例时,它的空值和方法 return 空引用错误!
基础实体是这样的:
export abstract class BaseEntity
{
abstract getColumns():string[];
}
我的模型是这样的:
export class Person extends BaseEntity
{
getColumns() {
return ["Id", "Name"];
}
}
我有一个通用基础组件:
@Component({
selector: 'base-component',
templateUrl: './base.component.html',
styleUrls: ['./base.component.css']
})
export class BaseComponent<TDomain extends BaseEntity,TService extends DataService > implements OnInit {
data:any[];
constructor() {
}
ExportToExcel(): void {
//must create an instance of derived class
//then call getcolumns method of it
let obj = {} as TDomain; // but its empty doesnt work
ExcelService.export(obj.getcolumns(this.data));
}
}
和派生组件:
@Component({
selector: 'Derived-Cmp',
templateUrl: './derived.component.html',
styleUrls: ['./derived.component.css']
})
export class DerivedComponent extends BaseCrudComponent<Person,PersonService> implements OnInit {
//ExportToExcel Method called form html
}
要创建 TDomain 的实例,您需要将 TDomain 的构造函数传递给基础 class:
export abstract class BaseEntity {
abstract getColumns(): string[];
}
export class Person extends BaseEntity {
getColumns() { return ["Id", "Name"]; }
}
export class BaseComponent<TDomain extends BaseEntity> {
data: any[];
constructor(public ctor: new () => TDomain) {
}
ExportToExcel(): void {
let obj = new this.ctor(); // create instance using the constructor
obj.getColumns(); /// call method
}
}
export class DerivedComponent extends BaseComponent<Person> {
constructor() {
super(Person)
}
}
link 表单 github 存储库 call derived class method inside base generic class