• dmchoi
  • [TypeScript] Literal types

    2021년 09월 13일

    타입스크립트에서 1 또는 0 처럼 특정한 값을 가지도록 제한하고 싶으면 어떻게 해야할까요?

    이럴때는 Literal type를 사용하면 됩니다.


    Literal type

    Literal type은 어떤 변수가 미리 골라놓은 데이터만 가질 수 있게 해줍니다.

    string, number 이런 것만 타입이 될 수 있는게 아니라, 문자열도 타입이 될 수 있습니다.

    let direction : 'left' | 'right';
    direction = 'left';
    // direction은 left 또는 right만 사용 가능

    함수도 마찬가지입니다.

    매개변수 타입을 선언할 때 글자나 숫자를 넣으면 그것만 파라미터로 넣을 수 있고 return 타입을 선언할 때도 문자열이나 숫자를 넣으면 그 값만 return할 수 있습니다.

    function f (a : 'hello') : 1 | 0 | -1 { // 매개변수로 'hello'만 넣을 수 있고 1, 0, -1만 return 할 수 있다. 
      return 1 
    }

    as const 

    만약 ‘kim’이라는 타입만 들어올 수 있는 함수에 person.name을 입력하고 싶은데

    let person = {
      name : 'kim'
    }
    
    function f(a : 'kim') {
    
    }
    f(person.name) // 에러 발생.

    에러가 나는 이유는 함수는 ‘kim’ 타입만 입력할 수 있다고 지정했는데, person.name은 string 타입이기 때문입니다.

    이를 해결하려면 다음과 같은 방법들이 있습니다.

    1. object를 만들 때 타입을 미리 잘 정하기

    2. assertion (as ‘kim’ )

    3. object에 as const를 붙이기 

    let person = {
      name : 'kim'
    } as const; // 이렇게
     
    function f(a : 'kim') {
    
    }
    f(person.name)

    as const 의 효과

    1. object의 value를 타입으로 바꿔준다 (위의 예에서 ‘kim’이 type이 됨)

    2. object 안에 모든 속성을 readonly로 바꿔준다.

    Tags
      © 2021 dmchoi, Powered By Gatsby.