Опишите тип для примера шаблона param - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь реализовать простой ioc-контейнер с проверкой типов.

Я хочу передать методу «регистр» абстрактный тип класса и экземпляр какого-либо производного типа.

И в «resol» я хочу передать абстрактный тип класса и вернуть типизированный экземпляр, который я передал в «методе register».

Как мне описать тип параметра "instance" в функции "register"?Мне удалось добиться правильной проверки типа для метода «resol», но эта техника с «{prototype: T}» не работала с методом «register».

const _items = new Map();

export class IoC {
    public static register<K>(service: K, instance: any) {
        _items.set(service, instance);
    }
    public static resolve<T>(service: {prototype: T}): T {
        return _items.get(service);
    }
}

// usage
IoC.register(AppServer, new TestAppServer());
IoC.resolve(AppServer) 

1 Ответ

0 голосов
/ 23 января 2019

Я закончил с этим.

const _items = new Map();

export class IoC {
    public static register<T>(service: {prototype: T}, instance: T) {
        _items.set(service, instance);
    }
    public static resolve<T>(service: {prototype: T}): T {
        return _items.get(service);
    }
} 
...