Ton*_*ony 8 enums casting typescript
这个说法失败了。我如何从一个枚举转换为另一个枚举(它们是相同的)
enum Enum1 {
Key1 = 'key'
}
enum Enum2 {
Key1 = 'key'
}
const key = Enum1.Key1
const key2 = key as Enum2
Run Code Online (Sandbox Code Playgroud)
小智 5
这是适用于数值的解决方案。但是,请注意,这是“危险的”,因为没有关于发生的转换的确认/验证,因此可能无法满足您对编译时检查的需求。最重要的是,在转换为第二个枚举之前,您必须转换为某种中间兼容类型(数字、字符串、任何、未知),通过这样做,您已经分离了任何有意义的语义检查。无论何时进行转换,您都将放弃根据定义进行编译时检查。
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);
Run Code Online (Sandbox Code Playgroud)

最好编写一个详细的转换函数来显式映射值,并可以检查两个枚举中的警告是否相同,如下所示:
switch (severity) {
case SeverityLevel.Warning:
return InternalSeverity.Warning;
break;
Run Code Online (Sandbox Code Playgroud)
这允许枚举之间的转换,能够适应基础值的变化(假设枚举的目的是使用名称来表示值并且值本身不相关)并且满足编译时检查(就好像有人从它将破坏的枚举)。如果值比名称更重要,那么您可能需要稍微不同的方法。
Tit*_*mir -1
在运行时,变量将包含枚举值(key在您的情况下),因此您可以直接进行转换any,它应该可以工作
const key = Enum1.Key1
const key2: Enum2 = key as any
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11974 次 |
| 最近记录: |