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로 표시되어야 함을 요구합니다.

왜 좋지 않은가?

프로미스를 반환하는 함수는 일반적으로 그 비동기성의 특성을 명확히 하기 위해 async로 표시해야 하며, 내부에서 await 사용이 가능하도록 해야 합니다. 이를 통해 코드의 가독성이 향상되고, 프로미스 처리 시 발생하는 일반적인 실수를 방지할 수 있습니다.

예시

이 규칙에 잘못된 코드 예시:

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

기본값: true

async 키워드 없이 any 타입을 반환하는 함수를 허용할지 여부.

allowedPromiseNames

type: string[]

기본값: []

async 키워드 없이도 허용되는 프로미스 타입 이름 목록입니다.
예: ["SpecialPromise"]로 설정하면 SpecialPromise를 반환하는 함수에 async가 필요 없도록 허용합니다.

checkArrowFunctions

type: boolean

기본값: true

화살표 함수에서 async 키워드 누락 여부를 확인할지 여부.

checkFunctionDeclarations

type: boolean

기본값: true

함수 선언에서 async 키워드 누락 여부를 확인할지 여부.

checkFunctionExpressions

type: boolean

기본값: true

함수 표현식에서 async 키워드 누락 여부를 확인할지 여부.

checkMethodDeclarations

type: boolean

기본값: true

메서드 선언에서 async 키워드 누락 여부를 확인할지 여부.

사용 방법

이 규칙을 구성 파일 또는 CLI를 통해 활성화하려면 다음을 사용하세요:

json
{
  "rules": {
    "typescript/promise-function-async": "error"
  }
}
bash
oxlint --type-aware --deny typescript/promise-function-async

참고 문서