因此,我得到了:

interface Foo {
  type: FooType;
}

哪一个最好用作FooType:

输入别名吗?

type FooType = 'BAR' | 'BAZ';

还是基于字符串的枚举

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

两者的优缺点是什么?

最佳答案

您的第一个示例(称为“类型别名”)实际上称为string literal type
我认为这取决于个人喜好。
枚举

  • 专业,您不需要知道
  • 的内部值是多少
  • 专业(主观),代码读起来不错
  • Con 它们具有运行时工件(尽管您可以使用const enum避免这种情况)
  • Con 它们不能是环境

  • 字符串文字
  • Pro 没有运行时工件(可能是环境工件)
  • 专业版无需传递值
  • 处理string类型值时使用,通常必须先声明为any,然后再声明为值


  • let x: string
    let y: FooType
    
    y = x as any as FooType
    
    (编辑:嗯,看起来他们已经解决了这个问题)
    我曾经更喜欢枚举,但是最近我一直倾向于字符串文字类型。同样,我认为这全都归因于个人喜好。

    09-25 19:37