Стратегия - строка для ввода машинописного текста

Я использую typescript и хочу сопоставить строку с типом, чтобы я мог создавать экземпляры определенного типа на основе имеющейся у меня строки.

Я пишу в node.js

Например, я получаю из БД диапазон значений, и в этом случае я хочу использовать свой класс RangeFilter, но в случае размера значения я хочу использовать класс SizeFilter. Все они наследуются от интерфейса IFilter.

Итак, есть ли способ сопоставить (создать словарь) между значениями типа

Так что это может быть так

карта: {ключ: строка, значение: IFilter};

Возвращает новую карту[диапазон] //возвращает RangeFilter


person Shoham Ben Shitrit    schedule 13.07.2016    source источник
comment
Поскольку я пишу на node.js, у меня нет объекта окна, и я не могу искать внутри него свой объект   -  person Shoham Ben Shitrit    schedule 13.07.2016
comment
так что, может быть, вам лучше аргументировать свой вопрос, извините   -  person alessandro    schedule 13.07.2016
comment
Вы правы, я добавлю   -  person Shoham Ben Shitrit    schedule 13.07.2016
comment
См. этот вопрос о создании интерфейса карты TS stackoverflow.com/questions/34686200/   -  person Chic    schedule 13.07.2016


Ответы (1)


Способ есть.
В основном все, что вам нужно знать, это то, что тип класса MyClass: { new(): MyClass }.

Затем вы можете сделать:

interface IFilter {}

type FilterConstructor = { new(): IFilter };

class RangeFilter implements IFilter {}

class SizeFilter implements IFilter {}

let ctors: { [key: string]: FilterConstructor } = {};
ctors["range"] = RangeFilter;
ctors["size"] = SizeFilter;

function factory<T extends IFilter>(key: string): T {
    let ctor = ctors[key];

    return ctor == null ? null : new ctor() as T;
}

let rangeFilter: RangeFilter = factory("range");

(код на игровой площадке)

person Nitzan Tomer    schedule 13.07.2016
comment
Спасибо ! Очень помог - person Shoham Ben Shitrit; 13.07.2016