如何在TypeScript中实现类?

时间:2019-03-07 22:31:20

标签: typescript-generics

您能帮我创建类“ MyClass”吗? M类应该是Newable并实现IMyInterface

export interface IMyInterface<A>
{    
    SomeData : A;
}  

export class MyClass<T,M inherits IMyInterface<T> and new() >
{
    list = new Array<M>();

    privete Creator()
    {
        const      obj = new M();
                   obj.SameData = 'Hello data';  
        list.push( obj );
    }
 }

1 个答案:

答案 0 :(得分:0)

认为您正在寻找类似的东西...

export interface IMyInterface<A> {
  SomeData: A;
}  

export class MyClass<T, M extends IMyInterface<T>> {
  private list: M[] = [];

  constructor(private constructorFunction: {new(): M; }) {
  }

  public add(item: T): void {
    const obj = new this.constructorFunction();
    obj.SomeData = item;  
    this.list.push(obj);
  }
}

export class MyItem implements IMyInterface<string> {
  public SomeData: string = '';
}

const collection = new MyClass<string, MyItem>(MyItem);
collection.add('Hello data');

我已经对您的伪代码进行了调整,以便它可以实际编译并执行我认为您在该问题中针对的目标。要注意的重要一点是TypeScript中的类型在运行时没有表示形式,因此您无法执行new T()。相反,您需要为类型为{ new(): M; }的类传递构造函数。然后,您可以使用此值进行new X()来获得扩展接口的对象。