gpt4 book ai didi

TypeScript 枚举转换/转换

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:08 28 4
gpt4 key购买 nike

这个声明失败了。我如何从一个枚举转换为另一个枚举(它们是相同的)

enum Enum1 {
Key1 = 'key'
}

enum Enum2 {
Key1 = 'key'
}

const key = Enum1.Key1
const key2 = key as Enum2

最佳答案

这是一个适用于数字值的解决方案。但是,请注意这是“危险的”,因为没有关于转换发生的确认/验证,因此可能无法满足您对编译时检查的需求。最重要的是,在转换为第二个枚举之前,您必须转换为某种中间兼容 类型(数字、字符串、任何、未知),并且通过这样做,您已经分离了任何有意义的语义检查。任何时候你投你都在放弃编译时间检查的定义。

enum SeverityLevel {
Verbose = 0,
Warning = 1
}

enum InternalSeverity {
Verbose = 0,
Warning = 1
}


function CallMe(severity: SeverityLevel) {
console.log(`SeverityLevel: ${severity}`);
}

function Convert(severity: InternalSeverity) {
console.log(severity);
console.log(SeverityLevel[severity]);
console.log(InternalSeverity[severity]);

CallMe(severity as number as SeverityLevel);
}

Convert(InternalSeverity.Warning);

Output

最好编写一个详细的转换函数来显式映射值并可以检查,例如,两个枚举中的警告是否相同,如下所示:

switch (severity) {
case SeverityLevel.Warning:
return InternalSeverity.Warning;
break;

这允许枚举之间的转换,对底层值的变化具有弹性(假设枚举的目的是使用名称来表示值并且值本身是不相关的)并且满足编译时间检查(只要有人从枚举中删除 key 就会破坏)。如果值比名称更重要,那么您可能需要稍微不同的方法。

关于TypeScript 枚举转换/转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49168361/

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