关于typescript枚举,为什么这样赋值不报错?

发布于 2022-09-13 00:49:47 字数 271 浏览 16 评论 0

如下代码所示:

enum personType {
  man,
  woman,
}

const people: personType = 10

const people: personType = '123' // 报错 TS2322: Type '"123"' is not assignable to type 'personType'.

为什么在typescript并没有提示错误呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

时光暖心i 2022-09-20 00:49:47

TypeScript 有两种基本枚举类型,一种是数值枚举类型,一种是字符串枚举类型。两种枚举类型可以混合(不推荐),也就是混合枚举类型。

只要是带数值的枚举类型(数值枚举、混合枚举),都与数值 (number) 类型兼容,可以相互赋值。所以 const people: personType = 10 无误,哪怕 10 并不在已定义的枚举值中。

但是,如果是字符串枚举,却不能与字符串兼容,所以 const people: personType = 'dw' 会报错。

举例:

enum personType {
  man,
  woman,
}

const people: personType = 10;  // ✓

enum StringEnumType {
    A = "a",
    B = "b",
}

const se1: StringEnumType = "a"; // ✗
const se2: StringEnumType = 12;  // ✗

enum MixedEnumType {
    N1 = 0,
    N2,  // 自动数值
    S1 = "s1",  // 加入字符串,使之成为混合枚举
}

const me1: MixedEnumType = 10;    // ✓
const me2: MixedEnumType = "s1";  // ✗
中二柚 2022-09-20 00:49:47

强类型 ,首先检查下你这个

man、woman 类型定义

'123' != 123
string != int
微暖i 2022-09-20 00:49:47

因為

enum personType {
  man,
  woman,
}

等於

enum personType {
  man = 0,
  woman = 1,
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文