Для дописывания оператора typeof
ко всем типам юнион типа в TypeScript вы можете воспользоваться манипуляциями типами.
Для начала определяется само создание типа, у вас это юнион тип:
type MyUnionType = string | number | boolean;
Затем, используя манипуляции типами, можно применить ключевое слово typeof
ко всем типам внутри этого юнион типа. Для этого мы можем использовать инструмент "mapped types", который позволяет изменять типы в соответствии с некоторыми заданными правилами.
Применим "mapped types" для добавления typeof
ко всем типам в нашем юнион типе:
type AddTypeOf<T> = { [K in keyof T]: typeof T[K]; }; type MyUnionTypeWithtypeof = AddTypeOf<MyUnionType>; // Результат: { [x: number]: string; [x: string]: number; } & { [x: number]: boolean; [x: string]: boolean; } & { [x: number]: number; [x: string]: number; }
В этом примере мы определили новый тип AddTypeOf<T>
, который создает новый тип, идентичный исходному типу T
, но с добавленным typeof
ко всем типам свойств. Затем мы использовали keyof T
, чтобы перебрать все свойства в T
, и применили оператор typeof
к каждому свойству.
Обратите внимание, что получившийся тип MyUnionTypeWithtypeof
- это интерсекция всех типов после применения typeof
, то есть все свойства и их типы из исходного юнион типа соединились в один тип.
Теперь, когда вы применили добавление typeof
ко всем типам в вашем юнион типе, вы можете использовать этот новый тип MyUnionTypeWithtypeof
в своем коде для получения типов всех свойств внутри юнион типа с оператором typeof
.