-
Typescript - Literal TypesFront-end/Typesrcipt 2023. 4. 13. 14:35728x90반응형
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