Dandy Now!
  • [TypeScript] 유데미 강의 "Typescript :기초부터 실전형 프로젝트까지 with React + NodeJS" 정리(섹션 2: 기본 & 기본 타입)
    2024년 03월 01일 23시 09분 38초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    섹션 2: 기본 & 기본 타입

    📌 튜플(tuple)

    • 독특한 배열
    • 각 요소 별로 타입을 지정할 수 있으며, 고정된 길이 가짐
    • push() 메서드로 요소 추가할 경우 길이 늘어남
    const person: {
      name: string;
      age: number;
      hobbies: string[]; // 배열
      role: [number, string]; // 튜플
    } = {
      name: "김일남",
      age: 99,
      hobbies: ["Squid Game", "Make Money"],
      role: [1, "businessman"],
    };
    
    // person.role[1] = 2; // 1번 인덱스는 string 타입 이므로 number 타입의 값으로 변경할 수 없다.
    person.role[1] = "chairman"; // 변경하고자하는 값이 string 타입이기 때문에 가능
    person.role.push("admin"); // 타입스크립트가 push() 메서드는 막지 않는다.
    
    console.log(person);

     

    📌 열거형(enum)

    • 자바스크립트에는 없는 기능
    • 튜플 개념과 비슷
    • 특정 식별자를 몇 개 가지고 있음
    • 애플리케이션에서 사용하는 전역 상수이며 숫자 값을 가짐
    • 읽을 때는 사람이 읽을 수 있는 라벨 사용
    // CASE1
    // 식별자는 기본적으로 왼쪽에서 부터 0부터 시작하는 연속적인 정수 값을 가진다.
    // enum Role {
    //   ADMIN,        // 0
    //   READ_ONLY,    // 1
    //   AUTHOR,       // 2
    // }
    
    // CASE2
    // 식별자에 특정 값을 할당할 수 있고, 정수인 경우 연속적인 값을 가진다.
    // enum Role {
    //   ADMIN = 5,    // 5
    //   READ_ONLY,    // 6
    //   AUTHOR,       // 7
    // }
    
    // CASE3
    // 식별자에 문자열 값도 할당 가능하다.
    enum Role {
      ADMIN = "ad", // ab
      READ_ONLY = "ro", // ro
      AUTHOR = "au", // au
    }
    
    const person = {
      name: "김일남",
      age: 99,
      hobbies: ["Squid Game", "Make Money"],
      role: Role.ADMIN,
    };
    
    // console.log(person.role); // CASE1: 0, CASE2: 5, CASE3: ab
    
    if (person.role === Role.ADMIN) {
      console.log(person.name); // 김일남
    }

     

    📌 유니온(union)

    • 하나 이상의 타입을 지정 가능
    // | 연산자 사용해 하나 이상의 타입 지정
    function combine(input1: number | string, input2: number | string) {
      let result;
      // 분기문 사용해 연산 가능 여부 체크
      if (typeof input1 === "number" && typeof input2 === "number") {
        result = input1 + input2;
      } else {
        result = input1.toString() + input2.toString();
      }
      return result;
    }
    
    const combinedAges = combine(99, 98);
    console.log(combinedAges);
    
    const combinedNames = combine("김일남", "김이남");
    console.log(combinedNames);

     

    📌 리터럴(literal)

    • 리터럴을 타입으로 이용 가능
    • 주로 유니언 타입과 함께 사용
    // resultConversion: "as-number" | "as-text"가 리트럴 타입
    function combine(
      input1: number | string,
      input2: number | string,
      resultConversion: "as-number" | "as-text"
    ) {
      let result;
      if (
        (typeof input1 === "number" && typeof input2 === "number") ||
        resultConversion === "as-number"
      ) {
        result = Number(input1) + Number(input2);
      } else {
        result = input1.toString() + input2.toString();
      }
      return result;
    }
    
    const combinedAges = combine("99", "98", "as-number");
    console.log(combinedAges);

     

    📌 타입 별칭(type alias)

    • type 키워드 사용한 별칭 지정 가능
    // uniion 코드를 type alias 수정해봄
    type Comabinable = number | string; // 별칭 지정
    type CoversionDescriptor = "as-number" | "as-text"; // 별칭 지정
    
    // [[ 별칭 적용
    function combine(
      input1: Comabinable,
      input2: Comabinable,
      resultConversion: CoversionDescriptor
    ) {
    // ]]
      let result;
      if (
        (typeof input1 === "number" && typeof input2 === "number") ||
        resultConversion === "as-number"
      ) {
        result = Number(input1) + Number(input2);
      } else {
        result = input1.toString() + input2.toString();
      }
      return result;
    }
    
    const combinedAges = combine("99", "98", "as-number");
    console.log(combinedAges);

     

    📌 함수 타입

    // 반환값이 없는 경우
    function printResult(num: number): void {
      console.log("Result: " + num);
    }
    
    function add(n1: number, n2: number) {
      return n1 + n2;
    }
    
    // 반환 값이 있는 경우
    let combineValues: (a: number, b: number) => number;
    
    combineValues = add;
    console.log(combineValues(1, 1));
    // 콜백 함수 타입
    function addAndHandle(n1: number, n2: number, cb: (num: number) => void) {
      const result = n1 + n2;
      cb(result);
    }
    
    addAndHandle(1, 2, (num) => {
      console.log(num);
    });

     

    📌 unknown

    let userInput: unknown;
    let userName: string;
    
    userInput = 5;
    userInput = "김일남";
    
    // 사용자가 무엇을 입력할지 아직 모르기 때문에 unknown이라고 함
    // any는 타입스크립트에서 가장 유연한 타입, unknown은 any보다 조금 더 제한적
    
    // userName = userInput; // userInput이 any 타입이면 에러가 없지만, unknown 타입이면 에러 발생
    
    // if문으로 타입을 확인하면 에러 없이 사용 가능
    if (typeof userInput === "string") {
      userName = userInput;
    }

     

    📌 never

    // 의도적으로 예외를 일으키고 반환값을 만들지 않을 때 사용
    function generateError(message: string, code: number): never {
      throw { message, errorcode: code }; // 에러를 일으키면 실행이 중단되기 때문에 void가 반환하지 않고 never를 반환(아무것도 반환하지 않음)
    }
    
    const result = generateError("An error occurred!", 500);
    console.log(result);
    728x90
    반응형
    댓글