[exception] 적절한 오류 사용

나는 상당히 큰 프로젝트에 TypeScript를 사용하고 있으며 Errors를 사용하기위한 표준이 무엇인지 궁금합니다 . 예를 들어 Java에서 범위를 벗어난 예외를 색인으로 전달한다고 가정 해보십시오.

throw new IndexOutOfBoundsException();

TypeScript의 해당 문장은 다음과 같습니다.

throw new Error("Index Out of Bounds");

다른 어떤 방법으로이 작업을 수행 할 수 있습니까? 허용되는 표준은 무엇입니까?



답변

누군가가이 링크를 MDN에 댓글로 올렸는데 도움이되었다고 생각합니다 . ErrorTypes와 같은 것들을 매우 철저하게 설명합니다.

EvalError — 전역 함수 eval ()과 관련하여 발생하는 오류를 나타내는 인스턴스를 만듭니다.

InternalError — JavaScript 엔진에서 내부 오류가 발생할 때 발생하는 오류를 나타내는 인스턴스를 만듭니다. 예를 들어 “너무 많은 재귀”.

RangeError — 숫자 변수 또는 매개 변수가 유효한 범위를 벗어날 때 발생하는 오류를 나타내는 인스턴스를 만듭니다.

ReferenceError — 유효하지 않은 참조를 역 참조 할 때 발생하는 오류를 나타내는 인스턴스를 만듭니다.

SyntaxError — eval ()에서 코드를 구문 분석하는 동안 발생하는 구문 오류를 나타내는 인스턴스를 만듭니다.

TypeError — 변수 또는 매개 변수가 유효한 유형이 아닐 때 발생하는 오류를 나타내는 인스턴스를 만듭니다.

URIError — encodeURI () 또는 decodeURI ()에 유효하지 않은 매개 변수가 전달 될 때 발생하는 오류를 나타내는 인스턴스를 만듭니다.


답변

JavaScript에서 범위를 벗어난 규칙은을 사용하고 RangeError있습니다. / else + instanceof가 가장 일반적인 것부터 시작 하는 경우 유형 사용을 확인하려면

try {
    throw new RangeError();
}
catch (e){
    if(e instanceof RangeError){
        console.log('out of range');
    }
}


답변

예외별로 메시지를 내보내고 표시하는 간단한 솔루션입니다.

try {
  throw new TypeError("Error message");
}
catch (e){
  console.log((<Error>e).message);//conversion to Error type
}

주의

블록에서 어떤 종류의 오류가 발생할 수 있는지 모른다면 위의 해결책은 아닙니다. 이러한 경우 타입 가드를 사용해야하고 적절한 오류에 대한 적절한 처리를 수행해야합니다. @Moriarty 답변을 살펴보십시오.


답변

switch 문을 잊지 마십시오 :

  • 로 취급을 확인하십시오 default.
  • instanceof 수퍼 클래스에서 일치 할 수 있습니다.
  • ES6 constructor는 정확한 수업에 일치합니다.
  • 더 쉽게 읽을 수 있습니다.
function handleError() {
    try {
        throw new RangeError();
    }
    catch (e) {
        switch (e.constructor) {
            case Error:      return console.log('generic');
            case RangeError: return console.log('range');
            default:         return console.log('unknown');
        }
    }
}

handleError();


답변