Ale*_*ehe 7 enums casting typescript
我想将具有枚举类型的一个对象的属性映射到具有其他枚举类型的另一个对象的属性。
我尝试过type1.a as Enum2或Enum2[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
};
Run Code Online (Sandbox Code Playgroud)
抛出错误:
Type 'Enum1' is not assignable to type 'Enum2'.
(property) Type2.a: Enum2
Run Code Online (Sandbox Code Playgroud)
您需要将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
};
}
Run Code Online (Sandbox Code Playgroud)
当该isEnum2函数在块中使用时if,该属性仅成为该块内的type1.a类型。Enum2if
注意:如果您使用的是 ES2017 或更高版本,则可以使用以下命令替换isEnum2using循环中的内容:for..inObject.values
return Object.values(Enum2).includes(value);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7522 次 |
| 最近记录: |