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

如下代码所示:

enum personType {
  man,
  woman,
}

const people: personType = 10

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

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

阅读 4.3k
3 个回答

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";  // ✗

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

man、woman 类型定义

'123' != 123
string != int

因為

enum personType {
  man,
  woman,
}

等於

enum personType {
  man = 0,
  woman = 1,
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题