【发布时间】:2018-09-20 13:34:25
【问题描述】:
假设我想确保{ myKey: '' } 中的myKey 只包含字符串foo、bar、baz,我可以通过两种方式实现。
// with a String Literal Type
type MyKeyType = 'foo' | 'bar' | 'baz';
// or with a String Enum
enum MyKeyType {
FOO = 'foo',
BAR = 'bar',
BAZ = 'baz'
}
我想知道一个相对于另一个的优缺点在哪里,因为在我看来两者都是一样的(除了我访问值的方式,例如条件检查)。
我在 TS 文档中发现的唯一区别是枚举是运行时的真实对象,在某些情况下可能需要这样做。
【问题讨论】:
-
到目前为止,我还没有发现
enum比字符串文字类型工作得更好、更清晰或更安全的案例。字符串文字的一个优点是您可以利用 pick/keyof 的泛型。我不认为你可以用enum做到这一点。 -
要考虑的一件事是可维护性:如果字符串的值可能会发生变化,那么使用字符串枚举意味着只更改 1 个字符串文字,而使用字符串类型意味着在任何地方更改它们'重复使用。
标签: typescript