打字稿枚举Object.values()返回值

时间:2019-05-08 16:08:15

标签: 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' ]

为什么这样做,我怎么只得到键和值?

1 个答案:

答案 0 :(得分:3)

这就是TypeScript转换enum类型的方式。

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");