【问题标题】:TypeScript: type alias vs string-based enumTypeScript:类型别名与基于字符串的枚举
【发布时间】:2020-09-28 16:41:43
【问题描述】:

所以,我有:

interface Foo {
  type: FooType;
}

这里用FooType哪个比较好:

类型别名

type FooType = 'BAR' | 'BAZ';

基于字符串的枚举

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

两者的优缺点是什么?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您的第一个示例(您称之为“类型别名”)实际上称为string literal type

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

    枚举

    • 你不需要知道内在价值是什么
    • 专业(主观)代码读起来很好
    • Con 他们有运行时工件(尽管您可以使用 const enum 来避免这种情况)
    • Con 他们不能是环境的

    字符串字面量

    • 专业版没有运行时工件(它可以是环境)
    • Pro 无需传递值
      • 缺点在处理string 类型的值时,您通常必须先断言any,然后再断言您的值
    let x: string
    let y: FooType
    
    y = x as any as FooType
    

    编辑:嗯,看起来他们已经修复了)

    我以前更喜欢枚举,但最近我更倾向于字符串文字类型。同样,我认为这完全取决于个人喜好。

    【讨论】:

    • 只是我的 2c:环境枚举是 supported
    • 当然,但是因为枚举具有运行时工件,您必须已经在别处定义了该枚举:“环境枚举用于描述已经存在的枚举类型的形状。”
    • 对我来说,枚举最重要的优点是 IDE 提供了更好的支持:例如重构以及当然寻找参考
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多