typescript 변수에 들어갈 값을 제한하고 싶을 때는? Literal Types

jangdu·2023년 3월 23일
0

typescript

목록 보기
13/16

어떤 변수에 어떤 값만 가질 수 있게 제한하고 싶을때는 js에서 const를 사용한다.
1이나 0을 가지게 하고싶을 때는 number로 하는거보다. Literal type을 선언하자
어떤 변수가 미리 골라논 데이터만 가질 수 있게하는 친구임 ㅇㅇ

Literal Type

string, number이런거 말고 일반적인 글자도 타입이 될 수 있다.

let john : '남자';
let kim : '여자';

이렇게하면
이런거 마음대로 변수나 함수에 할당가능하다.

jhon이라는 변수는 '남자'라는 글자만 할당이 가능한다.
이렇게 특정한 글자나 숫자만 가질 수 있게 제한을 두는 타입을
literal type이라고 한다.

or기호 써서도 사용이 가능

물론 함수도 매한가지

function f (a: 'hello') : 1 | 0 {
  return 1
}

파라미터나 리턴 타입 선언할 때 숫자나 글자를 넣으면 그 값만 들어감


살펴보다 보니 const랑 상당히 비슷한데
const는 값을 바꿀수 없는 변수다.

const a = 1;

그래서 변하지않는 중요한 정보를 저장할 때 const를 쓰는데
가끔 변하는 중요한 친구한테는 const가 무용지물이다.
const는 변수가 'kim' | 'jang'이렇게만 가지게는 못한다.
그럴 때 ts로 literal type을 쓰면된다.

as const

var a = {
  name : 'kim'
}
function f (t : 'kim') {
}
f(a.name)

이렇게 하면 에러가 난다.
함수는 'kim'타입만 가능하다 하고
자료.name은 string타입이지 'kim'타입이 아니기 때문 ㅇㅇ

이럴때는
1. object 만들 때 타입 미리 정하기
2. assertion (as)
3. as const라는걸 사용하면 object에 자료를 붙이기 가능

var a = {
  name : 'kim'
} as const;
function f (t : 'kim') {
}
f(a.name)

이러면 err 안남
as const는 타입을 object value로 바꿔주고
object안의 속성을 전부 readonly로 바꿔준다

object를 잠궈놓으려면 이거 쓰면 됨 ㅇㅇ

profile
대충적음 전부 나만 볼래

0개의 댓글