本文へスキップ

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で開く

オプション

このルールは次のオプションを受け入れます。

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値として使用したい場合は、このルールは適切ではない可能性があります。

リソース