メインコンテンツにスキップ

no-unnecessary-condition

常に真または常に偽となる型を持つ条件式を禁止します。

🔒

拡張 "plugin:@typescript-eslint/strict-type-checked" ESLint 設定 で有効にすると、このルールが有効になります。

🔧

このルールによって報告される問題の中には、 --fix ESLint コマンドラインオプション.

で自動的に修正可能なものがあります。

💭 このルールを実行するには、 型情報

が必要です。

条件として使用される式は、すべて「必要」と見なされるためには真または偽として評価できる必要があります。逆に、式の型によって決定されるように、常に真または常に偽と評価される式は不要と見なされ、このルールによってフラグが立てられます。

  • 次の式がチェックされます
  • &&||、および ?:(三項)演算子への引数
  • ifforwhile、および do-while ステートメントの条件
オプションのチェーン式のベース値
module.exports = {
"rules": {
"@typescript-eslint/no-unnecessary-condition": "error"
}
};

.eslintrc.cjs

playground でこのルールを試す ↗

function head<T>(items: T[]) {
// items can never be nullable, so this is unnecessary
if (items) {
return items[0].toUpperCase();
}
}

function foo(arg: 'bar' | 'baz') {
// arg is never nullable or empty string, so this is unnecessary
if (arg) {
}
}

function bar<T>(arg: string) {
// arg can never be nullish, so ?. is unnecessary
return arg?.length;
}

// Checks array predicate return types, where possible
[
[1, 2],
[3, 4],
].filter(t => t); // number[] is always truthy
✅ 正しい

Playground で開く

オプション

type Options = [
{
/** Whether to ignore constant loop conditions, such as `while (true)`. */
allowConstantLoopConditions?: boolean;
/** Whether to not error when running with a tsconfig that has strictNullChecks turned. */
allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing?: boolean;
},
];

const defaultOptions: Options = [
{
allowConstantLoopConditions: false,
allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: false,
},
];

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

allowConstantLoopConditions

while (true) {}
for (; true; ) {}
do {} while (true);
✅ 正しい

{ allowConstantLoopConditions: true } の場合の正しいコードの例

allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing

これが false に設定されている場合、ルールは tsconfig.jsonstrictNullChecks コンパイラオプション (または strict) が true に設定されていないすべてのファイルでエラーが発生します。

strictNullChecks がない場合、TypeScript は本質的に型から undefinednull を消去します。これは、このルールが変数から型を検査するときに、**変数が null または undefined になる可能性があることを判別できない** ことを意味し、本質的にこのルールを役に立たなくします。

コードベースで完全な型安全性を確保するには、strictNullChecks を使用する必要があります。

何らかの理由で strictNullChecks をオンにできないが、それでもこのルールを使用したい場合は、このオプションを使用して許可できますが、このコンパイラオプションをオフにすると、このルールの動作が *未定義* であることを理解しておいてください。このオプションを使用している場合、バグレポートは受け付けません。

使用しない場合

プロジェクトが正確に型付けされていない場合、たとえば TypeScript に変換中の場合や、制御フロー分析におけるトレードオフの影響を受けやすい場合、特に型安全でないコード領域でこのルールを有効にすることが難しい場合があります。このルールを完全に無効にする代わりに、これらの特定の状況では、ESLint 無効化コメントを使用することを検討できます。

let condition = false as boolean;

const f = () => (condition = true);
f();

if (condition) {
}
  • 関連
  • ESLint: no-constant-condition - no-unnecessary-condition は本質的に no-constant-condition のより強力なバージョンですが、型情報が必要です。


strict-boolean-expressions - no-unnecessary-condition のより意見の強いバージョン。strict-boolean-expressions は特定のコードスタイルを強制しますが、no-unnecessary-condition は正確性に関するものです。

型チェックされた lint ルールは、従来の lint ルールよりも強力ですが、型チェックされた lint を構成する必要もあります。型チェックされたルールを有効にした後でパフォーマンスの低下が発生した場合は、パフォーマンスのトラブルシューティングを参照してください。