使用默认值初始化动态创建的对象-使用泛型和接口

时间:2019-02-08 12:54:46

标签: typescript

我需要初始化'gDetailDS'对象的初始值。我无法创建类而不是接口,并且接口不允许我设置默认值。

我尝试使用map或其他功能解决此问题,但未成功。使用map时,出现错误“ _this.gDetailDS.map不是函数”。

export interface InterfaceA{
    sysSeq: number;
    code: string;
    isUpdate: boolean;
    version: number;
}

export interface InterfaceB{
    sysSeq: number;
    name: string;
    isReserved: boolean;
    isPublic: boolean;
    version: number;
 }


export class DetailComponent<T> extends CoreComponent {
    gDetailDS: any;
    constructor(){
        this.gDetailDS =  <T> new Object; 
    }

}

我想专门为布尔值获取默认值。例如,在执行以下代码之后,

this.gDetailDS =  <InterfaceB> new Object; 

我应该有一个类型为InterfaceB的对象,其默认设置为

this.gDetailDS.isReserved has default value "false";
this.gDetailDS.isPublic  has default value "false";

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

一旦转换为Javascript,您的DetailComponent<T>就没有有关T的信息。因此,您不能直接使用它来获取T的实例。

但是,如果可以将参数添加到DetailComponent构造函数中,则解决问题的方法是:

export class DetailComponent<T> extends CoreComponent {
  gDetailDS: T;
  constructor(newInstance: new () => T){
      this.gDetailDS = new newInstance(); 
  }

}

class InterfaceAImpl implements InterfaceA {
  sysSeq: number;
  code: string;
  isUpdate: boolean;
  version: number;
};

var detailComponent: DetailComponent<InterfaceA> = new DetailComponent<InterfaceA>(InterfaceAImpl);