#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. Так что это проблема, потому что я не знаю, как написать тип карты после этого.