Как реализовать класс в TypeScript?

#typescript-generics

#typescript-дженерики

Вопрос:

Не могли бы вы помочь мне создать класс ‘MyClass’, класс M должен быть новым и реализовать 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:

Думаю, вы ищете что-то подобное…

 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() с этим значением, чтобы получить объект, который расширяет ваш интерфейс.