gpt4 book ai didi

typescript - 如何从 TypeScript 中的数字获取所有枚举标志?

转载 作者:行者123 更新时间:2023-12-04 13:06:02 25 4
gpt4 key购买 nike

给定:
枚举:{1, 4, 16}
标志:20

时间:我将标志传递给函数

然后:我得到给定枚举的标志数组:[4, 16]

注意:我曾尝试手动将 Enum 转换为数组并将值视为数字。但是当涉及到 TS 时我不知所措,我想使该函数动态化以防 Enum 发生变化。我真的不想硬编码。请帮忙!

enum Enum {
one = 1,
four = 4,
sixteen = 16,
}

const Flags: number = 20;

function getEnumValues(flags: number): Enum[] {
const enumFlags = [1, 4, 16];

const enums: Enum[] = [];

enumFlags.forEach(ef => {
if ((ef & flags) != 0) {
enums.push(ef);
}
})

return enums;
}

console.log(getEnumValues(Flags));

解决方案在这里找到:Typescript flagged enum get values不好,因为我的 Enum 不是序列 2 并且缺少 8。

最佳答案

我过去也遇到过类似的挑战。巧合的是,我写了一篇关于此的文章,因为这是一个非常有趣的挑战。

您可以在此处找到链接:https://dev.to/sincovschi/bitwise-enum-flags-to-generate-html-from-array-3576

您首先需要的是一个帮助程序,它通过将 TS enum 视为普通对象来将 Enum 的标志提取为数组。之后,您的方法最好通过循环标记并查看它是否出现在您的号码中。

从上面的代码沙箱链接复制的代码段。

const isPowerOfTwo = (x: number): boolean => {
return x != 0 && (x & (x - 1)) == 0;
};

export function getEnumFlags<
O extends object,
K extends O[keyof O] = O[keyof O]
>(obj: O): K[] {
const isFlag = (arg: string | number | K): arg is K => {
const nArg = Number(arg);
const isNumber = !Number.isNaN(nArg);
return isNumber && isPowerOfTwo(nArg);
};

const enumFlags: K[] = [];

Object.keys(obj).forEach(key => {
const nKey = Number(key);
if (isFlag(nKey)) {
enumFlags.push(nKey);
}
});

return enumFlags;
}

关于typescript - 如何从 TypeScript 中的数字获取所有枚举标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69464694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com