Skip to content
← Back to rules

typescript/promise-function-async 制限

💭 This rule requires type information.
🛠️ An auto-fix is available for this rule for some violations.

何をするか

このルールは、プロミスを返す関数またはメソッドが 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

参照