【问题标题】:Typescript Enum Object.values() return value打字稿枚举 Object.values() 返回值
【发布时间】:2019-09-26 10:20:55
【问题描述】:

为什么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' ]

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

【问题讨论】:

标签: typescript enums


【解决方案1】:

这就是 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)));

或者对于数字或字符串值(需要 tsconfig 中的 es2017 库):

const numericValues = Object.values(Enum).filter(x => typeof x === "number");
const stringValues = Object.values(Enum).filter(x => typeof x === "string");

【讨论】:

  • 好的,非常感谢。那么有没有办法只获取值?我想可以通过使用 Array.splice() 获得该结果,但我不确定顺序是否始终相同(尽管看起来是这样)。
  • const values = Object.values(Enum).filter(v => typeof v === 'number');
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 2022-06-11
  • 2022-10-25
  • 2019-09-25
  • 1970-01-01
  • 2017-05-09
相关资源
最近更新 更多