Size: a a a

2016 June 22

AB

Artur Bier in TypeScript
Погоди
источник

AK

Aleh Kashnikau in TypeScript
?
источник

AB

Artur Bier in TypeScript
Такой хак получился
abstract class Base {
   abstract foo():string;
}

class Child extends Base {
   foo() {
       return 'foo';
   }
}

const map = new Map<any, any>();
function create<T extends Base>(key:any):T {
   return map.get(key);
}

const base = create(Base); // ok
const child = create(Child); // ok
base.foo(); // ok
child.foo(); // ok
источник

AB

Artur Bier in TypeScript
Поправил пример
источник

AB

Artur Bier in TypeScript
В вебшторме подсказки падают, компилятор не ругается)
источник

AB

Artur Bier in TypeScript
Но это если у тебя один абстрактный класс
источник

AK

Aleh Kashnikau in TypeScript
ну не, у меня куча несвязанного
источник

AK

Aleh Kashnikau in TypeScript
блин, это вообще конфиг, он не так критичен, потому что эти get вызываются только в нем и буквально в паре мест еще
источник

AK

Aleh Kashnikau in TypeScript
но так удобно, что компилятор чекал возможные опечатки(
источник

AB

Artur Bier in TypeScript
Тады с приведением типа
abstract class Base implements IBase {
   abstract foo():string;
}

abstract class AnotherBase {
   abstract bar():number;
}

class Child extends Base {
   foo() {
       return 'foo';
   }
}

const map = new Map<any, any>();
function create<T>(key:any):T {
   return <T> map.get(key);
}

const base = create<Base>(Base); // ok
const anotherBase = create<AnotherBase>(AnotherBase); // ok
const child = create<Child>(Child); // ok
base.foo(); // ok
anotherBase.bar(); // ok
child.foo(); // ok
источник

AB

Artur Bier in TypeScript
Хм, а ты странный. Я конфиг сделал просто указывая интерфейс конфига.
источник

AB

Artur Bier in TypeScript
Config.get<IApplicationConfig>(filename)
источник

AB

Artur Bier in TypeScript
И вынес в итоге в статические шорткаты типа Config.getApplicationConfig()
источник

AB

Artur Bier in TypeScript
Хотя, если куча конфигов, да еще и с хелперами каким-то.
источник

AB

Artur Bier in TypeScript
В общем бери последний пример
источник

AB

Artur Bier in TypeScript
Он рабочий
источник

AB

Artur Bier in TypeScript
И подходят любые классы
источник

AK

Aleh Kashnikau in TypeScript
ну, я имею ввиду конфиг контейнера)
источник

AB

Artur Bier in TypeScript
Но надо дублировать
источник

AK

Aleh Kashnikau in TypeScript
да, понятно, что последний рабочий
источник