답변:
누군가가이 링크를 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');
}
}
else { throw; }
여기에 추가해야한다고 생각합니다
예외별로 메시지를 내보내고 표시하는 간단한 솔루션입니다.
try {
throw new TypeError("Error message");
}
catch (e){
console.log((<Error>e).message);//conversion to Error type
}
블록에서 어떤 종류의 오류가 발생할 수 있는지 모른다면 위의 해결책은 아닙니다. 이러한 경우 타입 가드를 사용해야하고 적절한 오류에 대한 적절한 처리를 수행해야합니다. @Moriarty 답변을 살펴보십시오.
<Error>
TS 컴파일러에게 (1) 지능적이고 (2) 더 나은 유형 검사를 할 수 있도록 e
여기에 유형 <Error>
이 있음을 알리는 것입니다. 모든 캐스트는 JS로 전혀 변환되지 않으며 순전히 구문 설탕이라는 점에 유의하십시오.
switch 문을 잊지 마십시오 :
default
.instanceof
수퍼 클래스에서 일치 할 수 있습니다.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();
RangeError
. 사용자 정의 유형을 정의해야합니까throw new Error("<message>");
?