Typescript Enum Object.values() 返回值

标签 typescript enums

为什么Object.values()Object.keys()总是同时给出键和值?

考虑以下代码:

enum Enum {
    FOO,
    BAR
}

console.log(Object.values(Enum));
console.log(Object.keys(Enum));

其输出将是:

[ 'FOO', 'BAR', 0, 1 ]
[ '0', '1', 'FOO', 'BAR' ]

为什么这样做,我如何只获取键和值?

最佳答案

就是这样enum类型由 TypeScript 转译。

enum Enum {
    FOO,
    BAR
}

会变成
"use strict";
var Enum;
(function (Enum) {
    Enum[Enum["FOO"] = 0] = "FOO";
    Enum[Enum["BAR"] = 1] = "BAR";
})(Enum || (Enum = {}));

请注意,提供了数字键和字符串键以方便与这两种类型之间的映射,使您能够执行以下操作:
const value = Enum.FOO;  // inferred type Enum.FOO
const key = Enum[value]; // inferred type string

如果你想得到一个只有数字或字符串键的数组,你可以这样做:
const numericKeys = Object.keys(Enum).map(x => parseInt(x)).filter(x => !isNaN(x));
const stringKeys = Object.keys(Enum).filter(x => isNaN(parseInt(x)));

或者对于数字或字符串值(需要 es2017 中的 tsconfig 库):
const numericValues = Object.values(Enum).filter(x => typeof x === "number");
const stringValues = Object.values(Enum).filter(x => typeof x === "string");

关于Typescript Enum Object.values() 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56044872/

相关文章:

java - 为什么Java枚举常量初始化不完整?

javascript - 如何结合解构赋值和可选链接?

angular - 无法从 Ionic 中的 ion-select 获得选定的值

swift - 声明枚举路由器 Alamofire swift 2.0

传递枚举和字符串可变参数的 Java 错误

typescript - 使用动态字符串对允许的枚举值进行类型保护?

javascript - 是否可以使用 ES6 类作为 Typescript 类型?

typescript - typeorm中如何正确使用和导出数据源

angular - 无法测试使用翻译管道的组件(找不到管道 'translate')

c++ - 为什么我们不能使用两个不同的可互换枚举?作为函数参数?