typescript/no-misused-promises 細かい
何をするか
このルールは、型チェックが許可しているが適切に処理されていない論理的な場所(たとえば if 文など)に Promise を渡すことを禁止します。このような状況は、await キーワードの欠落や、非同期関数の処理・待機方法に対する誤解によりよく発生します。
なぜ悪いのか
誤用された Promise は、未処理の Promise ハンドラがグローバルに登録されている場合を除き、クラッシュや予期しない振る舞いを引き起こす可能性があります。
例
このルールに違反する 不正な コードの例:
// 条件式に `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() });このルールに準拠する 正しい コードの例:
// 条件式内で `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 で次のように使用できます:
{
"rules": {
"typescript/no-misused-promises": "error"
}
}oxlint --type-aware --deny typescript/no-misused-promises