gpt4 book ai didi

typescript - 如何在 typescript 中将枚举映射到另一个枚举?

转载 作者:行者123 更新时间:2023-12-01 00:30:41 25 4
gpt4 key购买 nike

我想将一个具有枚举类型的对象的属性映射到另一个枚举类型的对象的属性。

我试过 type1.a as Enum2Enum2[type1.a]没有成功。

这是我的简化代码问题:

enum Enum1 {
N = 0,
A = 1,
B = 2
}

enum Enum2 {
A = 1,
B = 2
}

interface Type1 {
a: Enum1;
}

interface Type2 {
a: Enum2;
}

const type1: Type1 = {
a: Enum1.A
};

const type2: Type2 = {
a: type1.a
};

try it

抛出错误:
Type 'Enum1' is not assignable to type 'Enum2'.
(property) Type2.a: Enum2

最佳答案

您需要投 type1.a支持 Enum2 .为此,您需要使用“类型保护”。

这是您的代码示例:

enum Enum1 {
N = 0,
A = 1,
B = 2
}

enum Enum2 {
A = 1,
B = 2
}

interface Type1 {
a: Enum1;
}

interface Type2 {
a: Enum2;
}

const type1: Type1 = {
a: Enum1.N
};

function isEnum2(value: any): value is Enum2 {
let isEnum2 = false;

for (let key in Enum2) {
if (Enum2[key] === value) {
isEnum2 = true;
}
}

return isEnum2;
}

if (isEnum2(type1.a)) {
const type2: Type2 = {
a: type1.a
};
}

try it

isEnum2函数用于 if挡住 Prop type1.a变成 Enum2 类型里面 if只阻止。

注:您可以替换 isEnum2 中的内容使用 for..in如果您使用的是 ES2017 或更高版本,请使用 Object.values 循环:
return Object.values(Enum2).indexOf(value) > -1;

try it (不适用于 www.typescriptlang.org)

More info about Type Guards

关于typescript - 如何在 typescript 中将枚举映射到另一个枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55374588/

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