Skip to content
← Back to rules

typescript/await-thenable 正しさ

This rule is turned on by default when type-aware linting is enabled.
💭 This rule requires type information.
An auto-fix is available for this rule.

何を実行するか

このルールでは、非「Thenable」な値を await することを禁止します。

なぜ問題なのか

Promise 形式の値を await することは、有効な JavaScript ですが(即座に解決されます)、この振る舞いを知らない読者にとっては混乱を招く可能性があります。また、関数呼び出しの際に括弧を忘れてしまい、Promise を返す関数の呼び出しが漏れているなどのプログラマーの誤りの兆候でもあります。

このルールに対して不正なコードの例:

await 12;
await (() => {});

// 非 `Promise` 値
await Math.random;
await { then() {} };

// これは `Promise` ではありません。`Promise` を返す関数です。
declare const getPromise: () => Promise<string>;
await getPromise;

このルールに対して正しいコードの例:

await Promise.resolve('value');
await Promise.reject(new Error());

// `Promise` に似た値
await {
  then(onfulfilled, onrejected) {
    onfulfilled('value');
  },
};

// これは `Promise` です。関数を呼び出して生成されたものです。
declare const getPromise: () => Promise<string>;
await getPromise();

使用方法

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

json
{
  "rules": {
    "typescript/await-thenable": "error"
  }
}
bash
oxlint --type-aware --deny typescript/await-thenable

参照