ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Typescript - Literal Types
    Front-end/Typesrcipt 2023. 4. 13. 14:35
    728x90
    반응형

    Literal Types

    Literal Types 이란 집합 타입구체적인 하위타입이다.

    타입을 string 타입으로 선언 할 수 있지만 구체적으로 문자를 타입으로 선언 하여 그 문자만 들어올 수 있도록 할 수있다.

    string 뿐만 아니라 number, array, object 등 다양한 집합타입의 구체적인 하위타입을 선언 할 수 있다.

    let myLiteral: 'zelord';	// 문자를 타입으로 지정 (Literal Type)
    
    myLiteral = 'zelord';	//	지정된 문자만 들어갈 수 있다.
    myLiteral = 'zelord2'	//	타입으로 지정된 문자 가 아니면 에러를 발생한다.
    
    
    let myLiteralNum: 123;	// 숫자를 타입으로 지정
    myLiteralNum = 123;		// 지정된 숫자만 들어갈 수 있다.
    myLiteralNum = '123';	// 지정된 숫자 이외의 값이 들어가면 에러를 발생한다.

     

    union type 으로 literal type 을 선언할 수 있다. 

    let pet: 'cat' | 'dog';	// Literal type을 'cat', 'dog'로 선언했다.
    pet = 'cat';	// 타입에 포함된 값은 허용한다.
    pet = "dog";
    pet = "zelord";	// 타입에 포함되지 않는 갑은 허용하지 않는다.
    
    function myLiteralFn(a: 'cat') {	// 파라미터 타입을 'cat'으로 선언했다.
        console.log(a);
    }
    
    myLiteralFn('cat');	// 파라미터의 값을 타입에 포함된 값만 불러와서 적용할 수 있다.
    // 함수 파라미터 자리에 들어올 수 있는 변수가 제한적일때 사용하면 편리하다.

    Literal type const 변수와 비슷하게 사용할 수 있다.

     

     

     

    반응형

     

     

     

    as const

    Literal type의 문제점은 타입에 선언된 자료, 값을 불러오는게 아니라 타입을 불러오는것이다.

    let data = {	// id의 값은 27
        id: 27,
    }
    
    function dataFn(a: 27) {	// 파라미터의 타입은 27
    	console.log(a);
    }
    
    dataFn(data.id);	// 값의 27과 타입의 27은 다르다. data.id 는 타입이 number이다.

    이러한 문제점을 해결하기 위해 변수에 타입을 지정해주거나  as를 사용하여 타입을 변경한다.

    위의 방법말고 as const 를 사용하여 오브젝트를 literal type으로 지정하는 방법이있다.

     

    let data = {	// id의 값은 27
        id: 27,	// as const를 사용하여 key의 타입을 value로 변경해준다.
    } as const	// as문법과 다르며 object 를 literal type으로 자동으로 선언해준다
    
    function dataFn(a: 27) {	// 파라미터의 타입은 27
    	console.log(a);
    }
    
    dataFn(data.id);	// literal type으로 지정되어 에러가 사라진다.

    as const 는 key의 타입을 value로 변경해주고 오브젝트 안의 속성들을 모두 readonly로 변경해준다.

    728x90
    반응형

    'Front-end > Typesrcipt' 카테고리의 다른 글

    Typescript - HTML DOM 제어  (0) 2023.04.13
    Typescript - Method Alias  (0) 2023.04.13
    Typescript - Type Alias  (0) 2023.04.12
    Typescript - Narrowing & Assertion  (0) 2023.04.12
    Typescript - function parameter, return  (0) 2023.04.12
Designed by Tistory.