TypeScript枚举疑问:整数枚举值有效,字符串枚举值为何无效?
TypeScript混合枚举赋值问题解答
你的问题核心在于TypeScript对数字枚举和字符串枚举的类型检查规则差异,以及混合枚举的类型逻辑:
数字枚举的宽松检查:数字枚举会自动生成反向映射(比如
Type[1]会返回"UPPER"),TypeScript将数字枚举的类型视为number的子类型,因此直接赋值与枚举成员值相等的数字(如1)会被类型检查器认可,因为它匹配Type.UPPER的数值。字符串枚举的严格限制:字符串枚举没有反向映射,TypeScript对其类型检查更严格——
Type类型包含的是枚举成员本身(即Type.CAMEL),而非对应的字符串字面量"camelcase"。虽然Type.CAMEL的值确实是"camelcase",但在类型系统中,原始字符串字面量并不被视为Type类型的一部分,因此直接赋值"camelcase"会报错。正确的赋值方式:如果要给
myType赋值字符串枚举对应的内容,必须通过枚举成员引用:myType = Type.CAMEL; // 这是有效的
如果确实需要直接使用字符串字面量赋值,可以通过类型断言绕过检查,但这会牺牲类型安全性,不建议常规使用:
myType = "camelcase" as Type;
内容的提问来源于stack exchange,提问作者Niru7852
相关产品推荐
相关产品推荐

