Skip to content
← Back to rules

typescript/only-throw-error 철두철미

💭 This rule requires type information.

동작 방식

이 규칙은 비-에러 값(에러 객체가 아닌 값)을 던지는 것을 금지합니다.

왜 좋지 않은가요?

에러 객체(또는 에러의 서브클래스)만을 던지는 것이 좋은 관행으로 여겨집니다. 왜냐하면 에러 객체는 스택 트레이스를 자동으로 캡처하기 때문입니다. 이는 디버깅에 매우 유용합니다. 또한 일부 도구와 환경에서는 던진 값이 반드시 에러 객체여야 한다고 기대하고 있습니다.

예시

이 규칙에 부적절한 코드 예시:

ts
throw "error"; // 문자열 던지기

throw 42; // 숫자 던지기

throw true; // 부울값 던지기

throw { message: "error" }; // 일반 객체 던지기

throw null; // null 던지기

throw undefined; // undefined 던지기

const error = "Something went wrong";
throw error; // 비-에러 변수 던지기

이 규칙에 적절한 코드 예시:

ts
throw new Error("Something went wrong");

throw new TypeError("Invalid type");

throw new RangeError("Value out of range");

// 사용자 정의 에러 서브클래스
class CustomError extends Error {
  constructor(message: string) {
    super(message);
    this.name = "CustomError";
  }
}
throw new CustomError("Custom error occurred");

// 에러 객체인 변수
const error = new Error("Error message");
throw error;

구성

이 규칙은 다음 속성을 가진 구성 객체를 수용합니다.

allow

type: array

기본값: []

추가로 던질 수 있도록 허용하는 타입 또는 값 지정자를 포함하는 배열입니다. 사용자 정의 에러 타입을 던지는 것을 허용하려면 여기를 사용하세요.

allow[n]

type: string

특정 선언을 매칭하기 위한 타입 또는 값 지정자

다음과 같은 네 가지 유형의 지정자를 지원합니다:

  1. 문자열 지정자 (비권장): 이름으로 전역 매칭
json
"Promise"
  1. 파일 지정자: 로컬 파일 내에서 선언된 타입/값 매칭
json
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }
  1. 라이브러리 지정자: TypeScript 내장 라이브러리 타입 매칭
json
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }
  1. 패키지 지정자: npm 패키지에서 선언된 타입/값 매칭
json
{ "from": "package", "name": "Observable", "package": "rxjs" }
{ "from": "package", "name": ["Observable", "Subject"], "package": "rxjs" }

allowRethrowing

type: boolean

기본값: true

에러 객체가 아닌 값을 포획해서 재던지기를 허용할지 여부.

allowThrowingAny

type: boolean

기본값: true

any 타입으로 지정된 값을 던지는 것을 허용할지 여부.

allowThrowingUnknown

type: boolean

기본값: true

unknown 타입으로 지정된 값을 던지는 것을 허용할지 여부.

사용 방법

이 규칙을 설정 파일이나 커맨드 라인 인터페이스를 통해 활성화하려면 다음을 사용할 수 있습니다:

json
{
  "rules": {
    "typescript/only-throw-error": "error"
  }
}
bash
oxlint --type-aware --deny typescript/only-throw-error

참고 자료