将联合映射到类型名称的字符串文字联合

Map a union to a string literal union of the type names

我有这样的类型(在这种情况下,用户将是自定义界面):

export type ArgumentTypes = string | number | boolean | user;

现在,我想要一种

export type ArgumentTypeNames = "string" | "number" | "boolean" | "user";

我已经尝试在自己周围搜索了一段时间,但一直无法找到获取名称的方法。我试过 ${ArgumentTypes} 但没用。

我对高级类型(映射、条件等)还很陌生,所以我希望得到答案或潜在解决方案的解释。

AFAIK,对于今天的 TypeScript 版本,如果没有 string"string"number"number" 等的显式映射,你就无法做到这一点。存在于你的程序中的某个地方。映射可能如下所示:

interface TypeMapping {
  string: string;
  number: number;
  boolean: boolean;
  user: user;
}

然而,并非所有都丢失了。您可以将此映射作为真实来源,并从中派生出其他类型:

type ArgumentTypeNames = keyof TypeMapping;
type ArgumentTypes = TypeMapping[ArgumentTypeNames];

Try it.