У меня есть интерфейс вида
interface IStorage<T, K>
и класс, содержащий базовую реализацию
class Storage<T, K> implements IStorage<T, K>
а еще несколько классов, которые закрывают типы в этом дженерике, например
class MatchStorage extends Storage<Match, number>
У меня есть конфиг, согласно которому создаются хранилища в indexeddb. В том же конфиге я хочу сделать поле, в котором должен храниться класс, соответствующий этому хранилищу. Выглядит примерно так:
const matchStorageConfig: IStorageConfig = {
storageName: StorageName.Matches,
oftype: MatchStorage, // MatchStorage - это класс из примера выше
Когда я создаю хранилища, то следом создаю экземпляры класса для работы с этими хранилищами. Т.е. это по задумке должно выглядеть примерно так: берем из поля oftype класс и создаем экземпляр:
const instance = new oftype(тут аргументы);
Вопрос в том, как мне правильно типизировать oftype, чтобы туда:
* Можно было положить только классы, реализующие IStorage.
* Типы в IStorage могли быть любые, например, IStorage<User, number>, IStorage<Player, string> и т.д.
interface IStorageConfig {
oftype: ??????? как описать тип под такую задачу