[TypeScript] 타입을 미리 정하기 애매하다면,

Eden·2023년 1월 24일
3

TypeScript

목록 보기
3/10
post-thumbnail

Union Type

한 변수를 선언하고 그 변수에 숫자만 들어갈 수 있는 것이 아니라 숫자와 문자가 들어올 수 있는 변수를 만들고 싶다?
이 변수엔 string 또는 number가 들어올 수 있다.라는 타입정의를 하고 싶으면 |연산자를 사용하면 된다. OR연산자 같은 느낌인데 이런 타입을 Union type이라고 부른다.

(string | number)처럼 괄호를 쳐서 표현해도 된다. 위의 예제는 member와 me 변수에 string 또는 number가 들어올 수 있다고 union type을 지정해 준 것이다. 그리고 할당하는 순간 타입은 string 또는 number중 하나로 변한다.

그렇다면 array, object 자료 만들 때, union type을 쓰려면 어떻게 할까?

위 코드에 정의된 array와 object는 지금 타입때문에 에러가 난다.
array와 object 자료에 number 또는 string이 들어올 수 있게 타입을 고쳐본다면,


이렇게 할 수 있다.

union type의 특징은 변수의 정의된 union type은 할당과 동시에 or 역할이 사라지는데, array, object의 union type은 OR 연산자가 유지된다.

Any Type

any type은 아무 자료나 집어넣을 수 있는 타입이다. 쉽게 표현하자면 쉴드를 해제하는 역할이다.

any type은 실드 해제 문법이기 때문에 갑자기 타입을 마구 바꿔도 에러가 나지 않는다. 그렇지만 편하다고 막 쓸 수는 없다.
any type을 남발하다가는 타입관련 버그가 생겼을 경우에 추적하기 어려워진다. 타입 실드를 씌우지 않으면 타입스크립트를 쓰는 이유가 사실상 사라지기 때문이다.

그래서 비상시 쓰는 변수 타입체크 해제 기능 용도로만 사용하면 좋겠다.

Unknown Type

요즘 타입스크립트는 unknown type을 사용한다. any와 똑같이 모든 타입을 집어넣을 수 있다.

위 코드처럼 사용해도 에러가 나지 않는다. 아직 어떤 타입이 들어올지 모를 경우, 다양한 타입을 집어넣어야 할 경우 unknown type을 사용해보면 된다.
중요한 특징은
1. unknown 타입엔 모든 자료를 다 집어넣을 수 있고
2. 자료를 다 집어넣어도 타입은 그대로 unknown이다.

그래서 당연하게도 unknown 타입을 다른 곳에 집어넣으려고 하면 그 곳의 타입 쉴드가 이루어져서 에러가 난다. (any는 아니다)

이렇게 해도 에러가 발생한다.

왜냐하면 타입스크립트는 정확하고 확실한 것을 좋아해서, 확실하지 않은 타입에 연산을 해주는 그런 것을 싫어한다. 숫자가 아닌 것을 연산할 수 없기에...

타입스크립트에서 연산은 number류의 타입만 가능하고 .name 같은 것은 object류의 타입만 할 수 있다고 미리 정의되어있다.

그래서 결론은 아직 뭘 집어넣어야할지 모르겠는데 약간의 안정성을 도모하고 싶으면 Unknown type을 써보면 되겠다. 그치만 any나 unknown을 부여할 경우는 잘 없다.

profile
peanutbuttersandwich🥜

1개의 댓글

comment-user-thumbnail
2023년 1월 25일

한수 배워갑니다

답글 달기