error handle에 대해

YOUNGJOO-YOON·2022년 3월 7일
0

typeScript

목록 보기
60/65

// 처리하지 않은 에러는 다시 던지자

{
  try {
    console.log("hi");
    throw new Error("error message is hi");
  } catch (e) {
    if (e instanceof RangeError) {
      console.error(e.message);
    } else {
      throw e;
    }
  }
}

// custom error를 만들자.
{
  class ValidationError extends Error {
    constructor(message: string) {
      super(message);
      this.name = "ValidationError";
    }
  }

  class PropertyRequiredError extends ValidationError {
    property: string;
    constructor(property: string) {
      super("No property: " + property);
      this.name = "PropertyRequiredError";
      this.property = property;
    }
  }

  function readUser(json: any) {
    let user = JSON.parse(json);
    if (!user.age) {
      throw new PropertyRequiredError("age");
    }
    if (!user.name) {
      throw new PropertyRequiredError("name");
    }
    return user;
  }
  try {
    let user = readUser('{"age":25}');
  } catch (e) {
    if (e instanceof ValidationError) {
      console.error("Invalid data: " + e.message);
      console.error(e.name);
    } else if (e instanceof SyntaxError) {
      console.error("JSON Syntax Error: " + e.message);
    } else {
      throw e;
    }
  }
}
// custom한 에러


{
  class MyError extends Error {
    constructor(message: string) {
      super(message);
      this.name = this.constructor.name;
    }
  }
  class ValidationError extends MyError {}
  class PropertyRequiredError extends ValidationError {
    property: string;
    constructor(property: string) {
      super("No property: " + property);
      this.property = property;
    }
  }

  console.log("name???????????", new PropertyRequiredError("field").name);
}

profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.

0개의 댓글