prefer-literal-enum-member
全てのenumメンバをリテラル値にすることを要求します。
🔒
拡張 "plugin:@typescript-eslint/strict"
における ESLint設定 でこのルールを有効にします。
TypeScriptでは、enumメンバの値として、様々な有効なJavaScript式を使用できます。しかし、enumは独自のスコープを作成し、各enumメンバはそのスコープ内の変数になるため、開発者は結果の値に驚くことがよくあります。例えば
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?
}
答えは、
Foo.c
は実行時に1
になります[TypeScript playground。
したがって、リテラル値をenumメンバとして使用することを要求することで、コード内の予期しない結果を防ぐことがよくあります。このルールは、enumメンバにリテラルではない値が与えられた場合に報告します。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/prefer-literal-enum-member": "error"
}
};
このルールをPlaygroundでお試しください ↗
例
- ❌ 正しくない
- ✅ 正しい
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
}
Playgroundで開くenum Valid {
A,
B = 'TestStr', // A regular string
C = 4, // A number
D = null,
E = /some_regex/,
}
Playgroundで開くオプション
このルールは次のオプションを受け入れます。
type Options = [
{
allowBitwiseExpressions?: boolean;
},
];
const defaultOptions: Options = [{ allowBitwiseExpressions: false }];
allowBitwiseExpressions
true
に設定すると、enumイニシャライザでビット演算式を使用できます(デフォルト:false
)。
{ "allowBitwiseExpressions": true }
オプションのコード例
- ❌ 正しくない
- ✅ 正しい
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,
}
Playgroundで開くenum Foo {
A = 1 << 0,
B = 1 >> 0,
C = 1 >>> 0,
D = 1 | 0,
E = 1 & 0,
F = 1 ^ 0,
G = ~1,
}
Playgroundで開く使用しない場合
単純なリテラル以外のものをenum値として使用したい場合は、このルールは適切ではない可能性があります。