Skip to content
← Back to rules

typescript/no-misused-promises 細かい

💭 This rule requires type information.

何をするか

このルールは、型チェックが許可しているが適切に処理されていない論理的な場所(たとえば if 文など)に Promise を渡すことを禁止します。このような状況は、await キーワードの欠落や、非同期関数の処理・待機方法に対する誤解によりよく発生します。

なぜ悪いのか

誤用された Promise は、未処理の Promise ハンドラがグローバルに登録されている場合を除き、クラッシュや予期しない振る舞いを引き起こす可能性があります。

このルールに違反する 不正な コードの例:

ts
// 条件式に `Promise` を使用している場合:
const promise = Promise.resolve("value");
if (promise) {
  // 何らかの処理
}

// `void` を返す必要がある場所に `Promise` を使用している場合:
[1, 2, 3].forEach(async (value) => {
  await fetch(`/${value}`);
});

// `Promise` を展開(スプレッド)している場合:
const getData = () => fetch("/");
console.log({ foo: 42, ...getData() });

このルールに準拠する 正しい コードの例:

ts
// 条件式内で `Promise` を `await` して値を取得する場合:
const promise = Promise.resolve("value");
if (await promise) {
  // 何らかの処理
}

// `forEach` の代わりに `for-of` を使い、内部で `await` を使用する場合:
for (const value of [1, 2, 3]) {
  await fetch(`/${value}`);
}

// `Promise` そのものではなく、`Promise` から返されるデータを展開する場合:
const getData = () => fetch("/");
console.log({ foo: 42, ...(await getData()) });

設定

このルールは以下のプロパティを持つ設定オブジェクトを受け入れます。

checksConditionals

type: boolean

default: true

Promise が条件式に使われているかどうかをチェックするか。 true にすると、ブール値が必要な場所に Promise を使用することを禁止します。

checksSpreads

type: boolean

default: true

Promise がスプレッド構文に使われているかどうかをチェックするか。 true にすると、Promise 値を展開することを禁止します。

checksVoidReturn

type: object | boolean

checksVoidReturn.arguments

type: boolean

default: true

void を返す関数に渡される Promise を返す関数をチェックするか。

checksVoidReturn.attributes

type: boolean

default: true

void 期待の JSX 属性に Promise を返す関数が含まれていないかをチェックするか。

checksVoidReturn.inheritedMethods

type: boolean

default: true

void しか返さない継承メソッドをオーバーライドする Promise 返しのメソッドをチェックするか。

checksVoidReturn.properties

type: boolean

default: true

void を返すことを想定しているオブジェクトプロパティに Promise を返す関数が割り当てられていないかをチェックするか。

checksVoidReturn.returns

type: boolean

default: true

void を返す関数から Promise 値が返されていないかをチェックするか。

checksVoidReturn.variables

type: boolean

default: true

void を返すように型指定された変数に Promise を返す関数が割り当てられていないかをチェックするか。

使用方法

このルールを 有効化 するには、設定ファイルまたは CLI で次のように使用できます:

json
{
  "rules": {
    "typescript/no-misused-promises": "error"
  }
}
bash
oxlint --type-aware --deny typescript/no-misused-promises

参照