从数据源读取枚举时能否正确初始化?LoopBack 4场景解析
LoopBack 4中字符串枚举从数据库读取后的类型与运行时问题
在LoopBack 4中,我们可以创建模型并关联数据源实现数据读写。假设有如下TypeScript字符串枚举定义:
enum Priority { LOW = "LOW", MEDIUM = "MEDIUM", HIGH = "HIGH" };
编译为JavaScript后代码如下:
var Priority; (function (Priority) { Priority["LOW"] = "LOW"; Priority["MEDIUM"] = "MEDIUM"; Priority["HIGH"] = "HIGH"; })(Priority || (Priority = {}));
由于是字符串枚举,MySQL等数据库可以正常存储枚举值。针对读取后的相关问题解答如下:
读取后的结果类型
从数据库读取后,返回的原始值是字符串类型(比如"LOW"、"MEDIUM"这类字符串)。在TypeScript层面,如果你的LoopBack模型里把该字段声明为Priority枚举类型,TypeScript会在编译时进行类型断言,认为这个值是Priority枚举的一员,但这只是编译时的类型约束,运行时它本质还是字符串。
是否会产生运行时错误
正常情况下不会产生运行时错误:
- 因为你定义的是字符串枚举,枚举成员的值和字符串本身完全一致(比如
Priority.LOW就是字符串"LOW"),从数据库读出的字符串和枚举成员的值完全匹配。 - LoopBack在处理这类字段时,不会对字符串值做额外转换,直接返回原始字符串,你的代码中使用枚举的方式(比如
Priority.LOW === 读取到的值)也能正常匹配,不会有类型不兼容的问题。
只有当数据库中存储了不在枚举定义内的字符串值时,才可能在后续代码中出现逻辑错误(比如判断枚举分支时进入默认情况),但这不属于运行时类型错误,而是业务数据不合法导致的逻辑问题。
内容的提问来源于stack exchange,提问作者Zenul_Abidin
相关产品推荐
相关产品推荐

