2021-06-11 TIL

til  · 3 mins read

Facts

  • 인프런 타입스크립트 인문편 강의에서 첫 번째 프로젝트 실습 방법 안내를 수강하고 실습을 하였다.
  • 타입스크립트의 기본 type 12가지를 공부하였다.

Feelings

  • 타입스크립트 기본 type만 해도 알아야 할 것들이 너무 많았다. 천천히, 꾸준히, 성실히 학습해야겠다.
  • 시험기간이라 시간관리가 어렵다..

Findings

  • 타입스크립트에서 “never” type
    • 절대로 발생하지 않는 값의 type이다.
    • 함수의 경우 never type을 return하는 함수는 도달할 수 있는 end point가 없어야 한다. 예를 들어, 항상 예외를 던지거나 무한 루프가 돌아 절대로 return하지 않는(함수의 끝에 절대 도달하지 않는) 함수의 return type이다.
        // 항상 예외를 던짐 -> unreachable to end point
        function error(message: string): never {
        throw new Error(message);
        }
        // Inferred return type is never
        function fail() {
        return error("failed");
        }
        // 무한 루프 -> unreachable to end point 
        function infiniteLoop(): never {
        while (true) {
        }
        }
      
    • 모든 type의 하위 type이고 모든 type에 never type을 할당 할 수 있다. 하지만 어떤 유형도 never type의 의 하위 type이 아니고, never type을 제외한 다른 type에 never type을 할당 할 수 없다(any type도 never type에 할당 할 수 없음).
      let a: never = 1; // Error: Type number is not assignable to never
    
      function func(x: string): boolean {
      if (typeof x === "string") {
          return true;
      } else {
      return fail("Unexhaustive!"); // Type 'void' is not assignable to type 'boolean'.
      }
      }
      function fail(message: string): void { throw new Error(message); }
    
    
      let temp: any = 1;
      console.log(func(temp));
    
    • 위의 코드에서는 return type이 boolean인 func함수가 return하는 값은 fail함수의 return값이고 fail함수의 return type이 void이다. boolean type에 void type을 할당 할 수 없기 때문에 문법 Error가 발생한다. 하지만 never type이 fail함수의 return type으로 사용될 경우, boolean type에 never type을 할당 할 수 있으므로 오류가 발생하지 않고 never type을 return하는 함수는 항상 오류를 출력하거나 무한루프가 돌아 return값을 절대로 내보내지 않음을 알 수 있게 된다(위의 fail함수는 항상 에러를 던져 end point에 절대 도달하지 않음).
      function func(x: string): boolean {
      if (typeof x === "string") {
          return true;
      } else {
      return fail("Unexhaustive!"); // no Error!
      }
      }
      function fail(message: string): never { throw new Error(message); }
    
      let temp: any = 1;
      console.log(func(temp));
    

Future Action Plans

  • 6월까지 인프런 타입스크립트 입문 강의를 끝내야겠다.

Feedback

  • 일정관리, 시간관리에 더 집중해야겠다.