Typescript - экспорт карты подтипов - PullRequest
0 голосов
/ 15 октября 2018

У меня есть несколько классов вида:

abstract class A {}

class AB extends A {}
class AC extends A {}
class AD extends A {}

Теперь в файле я хочу экспортировать отображение имени класса -> конструкторов, так что-то вроде:

export default {
  AB,
  AC,
  AD
};

Каким должен быть тип этого экспорта?

Я пытался:

type Mappings = {
  [typeName: string]: typeof A
};

, но когда я пытаюсь что-то вроде:

import mappings from '..';

let s: string;
const TypeName = mappings[s];
const pr = new TypeName(); // ERROR

Я получаю ошибку: Cannot create an instance of an abstract class поскольку А абстрактно.

По сути, я пытаюсь выяснить, как заменить typeof A на что-то вроде subtypeof A или что-то еще работающее.

1 Ответ

0 голосов
/ 15 октября 2018

Когда вы используете typeof AbstractClass, тип будет представлять сам абстрактный класс, то есть он будет иметь абстрактный конструктор, который не может быть вызван.Самое простое решение - использовать вместо этого подпись конструктора.Конструктор возвратит экземпляр абстрактного класса, но не будет абстрактным конструктором в исходном абстрактном базовом классе.

type Mappings = {
  [typeName: string]: new () => A
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...