Flutter中如何用首字母大写字符串索引QuestionType枚举(禁用if/case)
无需分支语句映射首字母大写字符串到枚举
你可以通过将服务器返回的字符串转换为小写,直接利用枚举的键值映射特性来实现,完全不需要if或case语句:
TypeScript 实现
enum QuestionType { text, recording, goal, } // 模拟服务器返回的字符串 const serverResponse = "Recording"; // 转小写后直接索引枚举 const targetType = QuestionType[serverResponse.toLowerCase() as keyof typeof QuestionType];
这里的类型断言as keyof typeof QuestionType是为了让TypeScript确认转换后的字符串属于枚举的合法键,避免类型报错。
JavaScript 实现
如果是纯JS环境,不需要类型处理,直接转小写索引即可:
const QuestionType = { text: 0, recording: 1, goal: 2, }; const serverResponse = "Goal"; const targetType = QuestionType[serverResponse.toLowerCase()];
原理很简单:TypeScript的枚举会编译成包含正向(键到值)和反向(值到键)映射的对象,而纯JS的枚举对象本身就是键值对结构。只要把服务器返回的字符串格式统一成和枚举键一致的小写形式,就能直接通过索引访问到对应的枚举值。
内容的提问来源于stack exchange,提问作者DaraJ
相关产品推荐
相关产品推荐

