TypeScript:类型别名 vs 基于字符串的枚举

13

所以,我有:

interface Foo {
  type: FooType;
}

在这里作为FooType使用哪一个更好:

类型别名

type FooType = 'BAR' | 'BAZ';

使用字符串的枚举还是强类型枚举?

enum FooType {
  BAR = 'BAR',
  BAZ = 'BAZ'
}

这两者的优缺点是什么?

1个回答

4

你的第一个例子(你称之为“类型别名”)实际上被称为字符串字面量类型

我认为这是个人偏好的问题。

枚举

  • 优点,无需知道内部值
  • 优点,(主观上)代码易读
  • 缺点,它们具有运行时成分(尽管您可以使用const enum避免这种情况)
  • 缺点,它们不能是环境的

字符串字面量

  • 优点,没有运行时成分(并且它可以是环境的)
  • 优点,不需要传递值
    • 缺点,当处理string类型的值时,通常需要先断言为any再断言为您的值
let x: string
let y: FooType

y = x as any as FooType

(编辑: 嗯,看起来他们已经修复了这个问题)

我过去更喜欢使用枚举,但最近我倾向于使用字符串字面类型。我认为这一切都取决于个人偏好。


只是我的个人意见:环境枚举是被支持的,可参考链接:https://www.typescriptlang.org/docs/handbook/enums.html#ambient-enums。 - ford04
当然可以,但是由于枚举具有运行时实体,您还必须已经在其他地方定义了该枚举:“环境枚举用于描述已经存在的枚举类型的形状。” - Tyler Sebastian
5
对我来说,枚举类型最重要的优点是在集成开发环境(IDE)中得到更好的支持,例如重构和查找引用。 - TmTron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接