Skip to content
← Back to rules

typescript/prefer-function-type 스타일

🛠️ An auto-fix is available for this rule for some violations.

작동 방식

콜 서명이 있는 인터페이스 대신 함수 타입을 사용하도록 강제합니다.

왜 문제가 될까?

TypeScript는 함수에 대한 타입을 선언하는 두 가지 일반적인 방법을 허용합니다:

  • 함수 타입: () => string
  • 콜 서명이 있는 객체 타입: { (): string }

함수 타입 형식은 더 간결하고 가독성이 뛰어나므로 가능할 경우 일반적으로 선호됩니다. 단순히 콜 서명만 포함하는 인터페이스는 추가적인 기능 없이 불필요한 반복을 만듭니다.

예시

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

typescript
interface Example {
  (): string;
}

function foo(example: { (): number }): number {
  return example();
}

interface ReturnsSelf {
  (arg: string): this;
}

이 규칙에 올바른 코드 예시:

typescript
type Example = () => string;

function foo(example: () => number): number {
  return example();
}

// 함수 자체를 반환하며, `this` 인자도 아님
type ReturnsSelf = (arg: string) => ReturnsSelf;

// 여러 속성 허용
function foo(bar: { (): string; baz: number }): string {
  return bar();
}

// 여러 콜 서명(오버로드) 허용
interface Overloaded {
  (data: string): number;
  (id: number): string;
}

// 위 오버로드 인터페이스와 동일
type Intersection = ((data: string) => number) & ((id: number) => string);

사용 방법

구성 파일 또는 명령줄에서 이 규칙을 활성화하려면 다음을 사용하세요:

json
{
  "rules": {
    "typescript/prefer-function-type": "error"
  }
}
bash
oxlint --deny typescript/prefer-function-type

참고 자료