typescript/promise-function-async 制限
何をするか
このルールは、プロミスを返す関数またはメソッドが async でマークされていることを要求します。
なぜ問題なのか
プロミスを返す関数は通常、非同期的な性質を明確にし、内部で await を使用できるようにするため、async でマークされるべきです。これによりコードの可読性が向上し、プロミスの取り扱いに関する一般的な誤りを防ぐことができます。
例
このルールに対して不正なコードの例:
ts
// async なしでプロミスを返す関数
function fetchData(): Promise<string> {
return fetch("/api/data").then((res) => res.text());
}
// async なしでプロミスを返すメソッド
class DataService {
getData(): Promise<any> {
return fetch("/api/data").then((res) => res.json());
}
}
// async なしでプロミスを返すアロー関数
const processData = (): Promise<void> => {
return Promise.resolve();
};このルールに対して正しいコードの例:
ts
// async 関数
async function fetchData(): Promise<string> {
const response = await fetch("/api/data");
return response.text();
}
// async メソッド
class DataService {
async getData(): Promise<any> {
const response = await fetch("/api/data");
return response.json();
}
}
// async アロー関数
const processData = async (): Promise<void> => {
await someAsyncOperation();
};
// プロミスを返さない関数は問題ありません
function syncFunction(): string {
return "hello";
}
// 実際のプロミスではないがプロミス風の型を返す関数
function createThenable(): { then: Function } {
return { then: () => {} };
}設定
このルールは以下のプロパティを持つ設定オブジェクトを受け入れます。
allowAny
type: boolean
default: true
any 型を返す関数が async を必要とせずに許可されるかどうか。
allowedPromiseNames
type: string[]
default: []
async を必要とせずに許可されるプロミス型名のリスト。 例: ["SpecialPromise"] とすると、SpecialPromise を返す関数が async なしでも許可されます。
checkArrowFunctions
type: boolean
default: true
アロー関数に async キーワードが欠けているかチェックするかどうか。
checkFunctionDeclarations
type: boolean
default: true
関数宣言に async キーワードが欠けているかチェックするかどうか。
checkFunctionExpressions
type: boolean
default: true
関数式に async キーワードが欠けているかチェックするかどうか。
checkMethodDeclarations
type: boolean
default: true
メソッド宣言に async キーワードが欠けているかチェックするかどうか。
使用方法
このルールを有効にするには、設定ファイルまたは CLI で次のように使用できます:
json
{
"rules": {
"typescript/promise-function-async": "error"
}
}bash
oxlint --type-aware --deny typescript/promise-function-async