如何根据相同的键名在枚举之间进行映射?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据相同的键名在枚举之间进行映射?相关的知识,希望对你有一定的参考价值。

我有两个具有相同键名的枚举,我希望能够使用一个枚举中的值来从第二个枚举中获取值。

一个例子是将服务器错误转换为应用程序中的客户端错误:

enum serverErrors {
  first = "server error 1",
  second = "server error 2",
  third = "server error 3"
}

enum clientErrors {
  first = "client error 1",
  second = "client error 2",
  third = "client error 3"
}

目前我们正在使用这样的功能:

function translate(s: string) {
    switch (s) {
        case serverErrors.first:
            return clientErrors.first;
            /// ...
    }
}

我希望能够像上面这样做,而无需手动指定每个键应该转换成什么 - 它应该根据键的名称发生。

我试过这个:

type translator = {
  // Error: Type 'P' cannot be used to index type 'clientErrors'.
  [P in keyof typeof serverErrors]: clientErrors[P];
};

虽然我不确定如何从上面得到一个字符串值,即使它确实有效。

我希望这段代码能够正常工作:

const serverError = serverErrors.first;
const clientError = enumTranslator(serverError); // === clientError.first

以上是关于如何根据相同的键名在枚举之间进行映射?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用变量的值作为键名在 chrome 扩展中使用 chrome.storage?

array_diff_key — 使用键名比较计算数组的差集

array_diff_key — 使用键名比较计算数组的差集

连接两个具有不同键名的表

使用 Django 时如何在 MongoDB 中使用不同的键名?

Clojure按值获取映射键