来自字符串类型转换错误的TypeScript枚举

时间:2018-10-18 12:41:40

标签: angular typescript

正如文档所述,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时使用本地工具版本吗?

2 个答案:

答案 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中提供智能。