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

Gle*_*mad 8 typescript

所以,我有:

interface Foo {
  type: FooType;
}
Run Code Online (Sandbox Code Playgroud)

哪一个更适合在FooType这里使用:

输入别名

type FooType = 'BAR' | 'BAZ';
Run Code Online (Sandbox Code Playgroud)

还是基于字符串的枚举

enum FooType {
  BAR = 'BAR',
  BAZ = 'BAZ'
}
Run Code Online (Sandbox Code Playgroud)

两者的优缺点是什么?

Tyl*_*ian 4

您的第一个示例(您将其称为“类型别名”)实际上称为字符串文字类型

我认为这取决于个人喜好。

枚举

  • 专业人士,您不需要知道内部价值是什么
  • Pro(主观)代码读起来很好
  • 他们有运行时工件(尽管您可以使用const enum它来避免这种情况)
  • 缺点:它们不能是环境变量

字符串字面量

  • Pro没有运行时工件(并且它可以是环境的)
  • Pro无需传递值
    • 缺点:在处理string类型化值时,通常必须any在断言值之前先断言
let x: string
let y: FooType

y = x as any as FooType
Run Code Online (Sandbox Code Playgroud)

编辑:嗯,看起来他们解决了这个问题)

我曾经更喜欢枚举,但最近我更倾向于字符串文字类型。再说一遍,我认为这一切都取决于个人喜好。

  • 对我来说,枚举最重要的优点是在 IDE 中提供更好的支持:例如 **重构** 当然还有 **查找引用** (5认同)