Я пытаюсь реализовать простой 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)