Instanced универсальный класс throw "не является конструктором" - PullRequest
0 голосов
/ 08 ноября 2018

я пытаюсь создать экземпляр класса, передаваемого в качестве параметра другому, у меня это в одном файле, ImportedClass.ts:

export default class ImportedClass {
  public constructor() {
  }
  public async exampleMethod() {
    return "hey";
  }
}

И это в другом, InstanceClass.ts:

interface GenericInterface<T> {
  new(): T;
}

export default class InstanceClass <T extends { exampleMethod() }> {
  private c: GenericInterface<T>;
  public constructor(c: GenericInterface<T>) {
  }
  async work() {
    const instanceTry = new this.c();
    instanceTry.exampleMethod();
  }
}

А это по другому, ClassCaller.ts:

import ImportedClass from './ImportedClass';
import ImportedClass from './InstanceClass';

const simulator = new InstanceClass (ImportedClass);

Тогда, когда я называю это так:

simulator.work();

Выдает эту ошибку:

this.c is not a constructor

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вы забыли фактически использовать параметр конструктора!

private c: GenericInterface<T>;
public constructor(c: GenericInterface<T>) {
}

Вы пропустили это:

private c: GenericInterface<T>;
public constructor(c: GenericInterface<T>) {
   this.c = c;
}

И вы можете сделать это вместо этого ... auto map!

public constructor(private c: GenericInterface<T>) {
}
0 голосов
/ 08 ноября 2018

Вы немного испортили InstanceClass определение. Это должно быть примерно так:

export default class InstanceClass <T extends { exampleMethod() }> {
    constructor(private c: GenericInterface<T>) {
    }
    async work() {
        const instanceTry = new this.c();
        instanceTry.exampleMethod();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...