正如文档所述,TS支持基于数字和基于字符串的枚举:
enum numBasedEnum {
E1 = 0,
E2 = 1,
}
enum stringBasedEnum {
E3 = 'Str1'
E4 = 'Str2'
}
最近,我和我的团队由于以下问题而陷入困境:
Type '"Str1"' is not assignable to type 'stringBasedEnum'
,最后经过一些明显的错误转换之后:
Type 'string' cannot be converted to type 'stringBasedEnum'.
不过,对于我们中的一个人来说,它工作得很好(编译并正常运行,没有任何问题),而其他人在编译时失败了。
我们所有人都使用npm将实用程序保持在同一版本中(清除缓存并重新安装都无济于事),我们都在基于Windows的计算机上,并且我们都使用VS Code作为编辑器。
有什么想法可能导致此问题,以及如何预防该问题?
我认为这可能是某些全局工具版本(例如angular CLI),但是项目不应该在调用npm start
时使用本地工具版本吗?
答案 0 :(得分:1)
您的语法不正确。在声明枚举之前,您必须使用enum
关键字,例如
enum stringBasedEnum = {
FOO = 'Foo'
}
答案 1 :(得分:1)
确保使用相同版本的Typescript进行编译。字符串枚举功能是在Typescript 2.4中添加的。
使用tsc -v
检查全局Typescript版本。
检查您的工作区Typescript版本是否使用npx tsc -v
。
在Typescript 2.4之前,您可以在下面用hack声明带有字符串值的枚举。如果您还不能更新到Typescript 2.4+,请使用此选项。
enum stringBasedEnum {
E3 = <any>'Str1'
E4 = <any>'Str2'
}
还要检查VS代码使用的Typescript版本。您可以将其设置为使用全局版本,已安装的VS Code版本或工作区中安装的版本。设置此设置将有助于根据您支持的Typescript版本在VS Code中提供智能。