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

时间:2019-10-28 17:01:14

标签: typescript

所以,我得到了:

interface Foo {
  type: FooType;
}

在这里最好用作FooType

输入别名

type FooType = 'BAR' | 'BAZ';

还是基于字符串的枚举

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

两者的利弊是什么?

1 个答案:

答案 0 :(得分:1)

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

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

枚举

  • 专业版,您无需知道内部值是什么
  • 专业版(主观),代码可读性很好
  • 缺点,它们具有运行时工件(尽管您可以使用const enum来避免这种情况)
  • 缺点,它们不能处于环境状态

字符串文字

  • 专业版(没有运行时工件,并且可以是环境工件)
  • 专业版无需传递值
    • 缺点:在处理string类型的值时,通常必须先声明为any,然后再声明为值
let x: string
let y: FooType

y = x as any as FooType

编辑:嗯,看起来像这样)

我以前更喜欢枚举,但是最近我一直倾向于字符串文字类型。再次,我认为这全都取决于个人喜好。