gpt4 book ai didi

javascript - TypeScript - 基于枚举比较的 Switch 语句直接进入 DefaultCase

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

问题:我有一个 switch 语句。比较基于两个枚举。但条件全部返回 false。

在 STACK_OVERFLOW 上找到可能的解决方案:我在某处读到,为了避免这种情况,您必须在这种情况下放置一个 + ,如下所示:

switch(+resources) instead of switch(resources)

这有副作用,即将case转换为数字,这使得TS非常不高兴,因为我的枚举字符串

示例代码:我想在我的函数中使用枚举:

enum ResourceTypes {
RESOURCE1 = 'RESOURCE1',
RESOURCE2 = 'RESOURCE2',
RESOURCE3 = 'RESOURCE2',
}

export default ResourceTypes;
enum OperationTypes {
OPERATION1 = 'OPERATION1',
OPERATION2 = 'OPERATION2',
OPERATION3 = 'OPERATION3',
OPERATION4 = 'OPERATION4'
}

export default OperationTypes;

该函数始终恢复为默认情况,只是检查resourceType,并返回一个操作数组:

import ResourceTypes from '../enums/ResourceTypes';
import OperationTypes from '../enums/OperationTypes';

const operationPerResource = (resource: any): OperationTypes[] => {
const { RESOURCE1, RESOURCE2, RESOURCE3 } = ResourceTypes;
const { OPERATION1, OPERATION2, OPERATION3, OPERATION4 } = OperationTypes;

switch (resource) {
case RESOURCE1:
return [OPERATION2, OPERATION3, OPERATION4];
case RESOURCE2:
return [OPERATION1, OPERATION2, OPERATION3];
case RESOURCE3:
return [OPERATION1, OPERATION2];
default:
return [];
}
};

export default operationPerResource;

这就是我调用该函数的地方:

    const resources = transformEnumToArray(ResourceTypes);

const operations = operationPerResource(resources.value).map((value: any) => ({
label: value,
value
}));

这是 transofrmEnumToArray 函数:

const transformEnumToArray = (object: object): any =>
Object.keys(object).map(value => ({
label: value,
value
}));

export default transformEnumToArray;

有关实现的一些细节。 operations 用于 React-Select 组件。因此,对于我在一个字段(资源)上所做的每一个选择,我都会在另一个字段中获得可用的操作。

resources.value 打印在控制台中。根据每个 react 选择,我在 label, value 对象中返回所有内容。

<小时/>

我的意思是,我在这里做错了什么?为什么枚举的比较不起作用。你们能帮我一下吗?我用常量而不是枚举对此进行了测试,它工作得很好。那么与 Typescript 中的 enum 有什么区别呢? 谢谢

最佳答案

如果您在带有类型参数的函数中使用 switch 表达式,则这将按预期工作。

示例:

enum ResourceTypes {
RESOURCE1 = 'RESOURCE1',
RESOURCE2 = 'RESOURCE2',
RESOURCE3 = 'RESOURCE2',
}

enum OperationTypes {
OPERATION1 = 'OPERATION1',
OPERATION2 = 'OPERATION2',
OPERATION3 = 'OPERATION3',
OPERATION4 = 'OPERATION4',
}

const operationPerResource = (resource: ResourceTypes): OperationTypes[] => {
const { RESOURCE1, RESOURCE2, RESOURCE3 } = ResourceTypes;
const { OPERATION1, OPERATION2, OPERATION3, OPERATION4 } = OperationTypes;

switch (resource) {
case RESOURCE1:
return [OPERATION2, OPERATION3, OPERATION4];
case RESOURCE2:
return [OPERATION1, OPERATION2, OPERATION3];
case RESOURCE3:
return [OPERATION1, OPERATION2];
default:
return [];
}
};


console.log (operationPerResource(ResourceTypes.RESOURCE2))

将编译🥳并输出["OPERATION1", "OPERATION2", "OPERATION3"]👍

关于javascript - TypeScript - 基于枚举比较的 Switch 语句直接进入 DefaultCase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57456913/

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