타입스크립트 건망증

타입스크립트도 떠먹여줘야한다.

try {} catch (error) {
  if (error) {
    error.message; // Property 'message' does not exist on type '{}'
  }
}

// unknown 타입이 if 문을 통과하여 {}타입이 됨
// {} 타입은 속성을 사용할 수 없으므로 구체적으로 타입을 주장해야함
try {} catch (error) {
  if (error: Error) { // 타입 주장
    error.message; // Property 'message' does not exist on type '{}'
  }
}

// 타입 단언한것을 유지(기억)하기 위해 변수 사용
try {} catch (error) {
  const err = error as Error; // 타입 주장한것을 변수에 기록
  if (err) {
    err.message; // Property 'message' does not exist on type '{}'
  }
}

// Best
try {} catch (error) {
  if (error instanceof Error) {
    error.message; // Property 'message' does not exist on type '{}'
  }
}
  • error는 unknown 타입

  • as로 강제 단언한것은 일시적임

    • 판단한 문장에만 허용되므로 단언한 타입을 계속 기억할 수 있게 만들어야 한다.

    • -> 변수에 담아야 오래 기억한다.

  • as를 사용하지 않고 깔끔하게 타입 추론이 되는 방법이 있다면 그 방법을 사용

unknown은 if문을 통과하면 {}타입이 된다.

{} 타입은 속성을 사용할 수 없는 타입

Last updated