prefer-literal-enum-member
Require all enum members to be literal values.
在 ESLint 配置 中扩展"plugin:@typescript-eslint/strict"
可启用此规则。
TypeScript 允许枚举成员的值是多种不同类型的有效 JavaScript 表达式。 然而,由于枚举创建了自己的作用域,其中每个枚举成员都成为该作用域中的变量,因此开发者常常对结果值感到惊讶。 例如:
英:TypeScript allows the value of an enum member to be many different kinds of valid JavaScript expressions. However, because enums create their own scope whereby each enum member becomes a variable in that scope, developers are often surprised at the resultant values. For example:
const imOutside = 2;
const b = 2;
enum Foo {
outer = imOutside,
a = 1,
b = a,
c = b,
// does c == Foo.b == Foo.c == 1?
// or does c == b == 2?
}
The answer is that
Foo.c
will be1
at runtime [TypeScript 在线运行].
因此,通常最好通过要求使用字面量值作为枚举成员来防止代码中出现意外结果。 此规则报告何时为枚举成员提供了非字面量值。
英:Therefore, it's often better to prevent unexpected results in code by requiring the use of literal values as enum members. This rule reports when an enum member is given a value that is not a literal.
module.exports = {
"rules": {
"@typescript-eslint/prefer-literal-enum-member": "error"
}
};
示例
- ❌ 不正确
- ✅ 正确
const str = 'Test';
enum Invalid {
A = str, // Variable assignment
B = {}, // Object assignment
C = `A template literal string`, // Template literal
D = new Set(1, 2, 3), // Constructor in assignment
E = 2 + 2, // Expression assignment
}
Open in Playgroundenum Valid {
A,
B = 'TestStr', // A regular string
C = 4, // A number
D = null,
E = /some_regex/,
}
Open in Playground选项
allowBitwiseExpressions
当设置为 true
时,将允许你在枚举初始值设定项中使用按位表达式(默认值:false
)。
英:When set to true
will allow you to use bitwise expressions in enum initializer (default: false
).
{ "allowBitwiseExpressions": true }
选项的代码示例:
英:Examples of code for the { "allowBitwiseExpressions": true }
option:
- ❌ 不正确
- ✅ 正确
const x = 1;
enum Foo {
A = x << 0,
B = x >> 0,
C = x >>> 0,
D = x | 0,
E = x & 0,
F = x ^ 0,
G = ~x,
}
Open in Playgroundenum Foo {
A = 1 << 0,
B = 1 >> 0,
C = 1 >>> 0,
D = 1 | 0,
E = 1 & 0,
F = 1 ^ 0,
G = ~1,
}
Open in Playground何时不使用它
如果你想使用简单字面量以外的任何内容作为枚举值,则此规则可能不适合你。
英:If you want use anything other than simple literals as an enum value, this rule might not be for you.
选项
该规则接受以下选项
type Options = [
{
allowBitwiseExpressions?: boolean;
},
];
const defaultOptions: Options = [{ allowBitwiseExpressions: false }];