TypeScript — дизайн вложенных типов карт

#javascript #typescript #types #alias

#javascript #typescript #типы #псевдоним

Вопрос:

У меня ситуация, когда мне нужно создать новый тип A, который может быть типом класса / конструктора ИЛИ типом MapType. MapType содержит два типа: тип для ключа и тип для значения. Эти два типа относятся к типу A, потому что также возможно иметь вложенные карты.

Это мой тип класса / конструктора:

 export type Clazz<T> = { new(...args: any[]): T };
  

Есть ли у вас какие-либо предложения по его разработке?

— Обновить —

Я думал о чем-то подобном:

 export type Type<T = any> = ClassType<T> | MapType;

export type ClassType<T> = { new(...args: any[]): T };

export interface MapType { key: Type, value: Type };
  

Мне нужны конструкторы классов, чтобы создать их позже.
Что, если мне нужны обобщения для MapType? Есть предложения?

Комментарии:

1. Это интересный вопрос. К сожалению, у меня возникли небольшие проблемы, пытаясь понять, что вы пытаетесь сделать, и вы немного погружаетесь на территорию «проблемы XY» . Не могли бы вы добавить больше контекста?

2. Кроме того, в javascript / typescript для объектов ключ может иметь только тип string | number . Таким образом, «тип для ключа» может не иметь смысла. Не могли бы вы уточнить?

3. type A = {key: A, value: A} | Clazz<any> ? Если A это конструктор класса, какой тип он создает? (То есть, что должно быть на месте any ?)

4. @RicoKahler мне нужен тип для ключа, потому что я создаю сериализатор / десериализатор, который может принимать значение ключа (строки) и, в соответствии с объявленным типом, создавать экземпляр соответствующего класса, используя правильный анализатор.

5. @jcalz универсальный тип T. Так что это проблема, потому что я не знаю, как написать тип карты после этого.