TypeScript 시작하기 (3) - 타입 미리 정하기 애매할 때 (typescript union type, any, unknown)

funfungun·2025년 1월 3일
0

TypeScript 시작하기

목록 보기
3/18
post-thumbnail

오늘은 타입을 미리 정하기 애매할 때 사용하는 타입에 대해 알아보도록 하겠습니다.


  1. 지난번에 union type 에 대해서 간단히 확인해보았지만, 여기에 더해 숫자 or 문자 가 가능한 array 타입을 지정하려면 다음과 같이하면 됩니다.
    let members: (number | string)[] = [1, "2", 3];
    let objects: { a: number | string } = { a: 123 };

  1. 새롭게, any 타입은 모든 자료형을 허용해줍니다. 근데 이러면 타입스크립트를 쓰는 의미가 없어집니다. 타입실드를 해제해주는 문법이라고 생각하시면 됩니다.
    let nickname: any;
    nickname = 123;
    nickname = [];

  1. unknown 이라는 것도 있는데, any 와 유사하지만 any 보다 조금 더 안전한데, 아래와 같이 array 를 string 에 대입하려고 할 때 오류를 발생시킵니다. 반면에, any 는 오류가 발생하지 않습니다.

    let nickname: unknown;
    nickname = 123;
    nickname = [];
    
    let a: string = nickname; // 에러 발생

  1. 타입스크립트는 엄격한 언어입니다. 다음과 같이 union type 으로 지정했는데, 초기화를 해서 타입이 확정되지 않으면 에러가 발생합니다. string 이어도 +1 연산이 가능하고, number 이어도 +1 연산이 가능하기 때문입니다.

    let age: string | number;
    age + 1; // 에러 발생
    let age: number | string = 1;
    age + 1; // 정상
    let age: string;
    age + 1; // 정상
    let age: number;
    age + 1; // 정상
    let age: unknown = 1;
    age + 1; // 에러 발생

  1. 연습으로, 다음 변수 4개에 타입을 지정해봅시다. (단, age 변수엔 undefined 말고도 숫자도 들어올 수 있습니다.)

    // 타입 지정 전
    
    let user = 'kim';
    let age = undefined;
    let married = false; 
    let 철수 = [user, age, married];
    // 타입 지정 후
    
    let user: string = "kim";
    let age: undefined | number = undefined;
    let married: boolean = false;
    let 철수: (string | undefined | number | boolean)[] = [user, age, married];

  1. 학교라는 변수에 타입도 지정해봅시다.

    // 타입 지정 전
    
    let 학교 = {
        score : [100, 97, 84],
        teacher : 'Phil',
        friend : 'John'
    }
    학교.score[4] = false;
    학교.friend = ['Lee' , 학교.teacher]
    // 타입 지정 후
    
    let 학교: {
      score: (number | boolean)[];
      teacher: string;
      friend: string | string[];
    } = {
      score: [100, 97, 84],
      teacher: "Phil",
      friend: "John",
    };
    학교.score[4] = false;
    학교.friend = ["Lee", 학교.teacher];

unknown 타입인 변수를 조작하려면 내가 조작할 변수의 타입이 무엇인지 확실하게 체크하는 narrowing 또는 assertion 스킬을 사용해야 합니다. 이는 다음에 알아보도록 하겠습니다.

profile
Commercial Art

0개의 댓글