Как создать тип объединения из пространства имен в машинописном тексте - PullRequest
1 голос
/ 06 августа 2020

У меня есть что-то вроде этого:

// enums.ts
export enum UserAction {
  Login,
  Logout
}

export enum PostAction {
  DeletePost,
  CreatePost
}

И в другом файле я хочу создать тип объединения из всех экспортированных элементов в "enums.ts"

Я пытался напишите код, как показано ниже, но что-то пошло не так. Это работает, только когда я соединяю их вручную.

import * as types from "./enums";
import { PostAction, UserAction } from "./enums";

type MyOldUnion = PostAction | UserAction;       // works
type MyUnion = typeof types[keyof typeof types]; // not working

function useUnionType(type: MyUnion) {}
function useOldUnionType(type: MyOldUnion) {}

// TS2345: Argument of type 'PostAction.CreatePost' is not assignable to parameter of type 'MyUnion'.
useUnionType(PostAction.CreatePost); 
useOldUnionType(PostAction.CreatePost);

Есть ли способ создать тип объединения программно из пространства имен?

Или, может быть, делать это в машинописный текст?

Моя машинописная версия: 3.9.7

...