어떤 타입이어도 상관없는 타입이지만 최대한 쓰지 않는 게 핵심이다. 컴파일 타임에 타입 체크가 정상적으로 이뤄지지 않을 수 있기 때문이다.
컴파일 옵션 중에는 any
를 써야 하는데 쓰지 않으면 오류를 리턴하는 옵션인 nolmplicitAny
가 있다.
타입 안전성은 ts를 사용하는 주요 동기 중 하나이며 필요하지 않은 경우에는 any
를 사용하지 않도록 하는 것이 권장된다. 때문에 any
의 편의는 안전성을 잃게 되는 대가로 온다는 것을 명심해야 한다.
컴파일러와 미래의 코드를 읽는 팀원에게 이 변수가 무엇이든 될 수 있음을 알려주는 타입을 제공하기를 원하므로 이럴 때 unknown
타입을 이용한다.
unknwon
타입을 사용하면 runtime error를 줄일 수 있다.
데이터의 일부 유형의 검사를 수행해야 함을 알리는 API에 유용하다.
declare
키워드와 같이 사용할 수 있다. declare
키워드는 변수, 상수, 함수 또는 클래스가 이미 어딘가에 선언되어 있음을 의미하는 것이다. 즉, js 코드로 컴파일되지는 않고, ts 컴파일러에게 타입 정보를 알리기만 한다. declare로 선언한 것은 값이 할당되지 않아도 코딩할 수 있다.
unknown
타입을 사용할 때, 컴파일 전 타입을 확정시켜주지 않으면 다른 곳에 할당할 수 없고, 사용할 수도 없다.
if
조건문을 통해 해당 unknown
타입이 string
을 가지는지, number
를 가지는지 등에 대한 검사를 수행하고 타입을 좁혀가는 과정을 타입가드라고 한다.
never
타입은 함수에서, 아무것도 리턴되지 않는다는 뜻이다. 즉, 함수의 바디가 끝나지 않아야 한다. 끝나지 않도록 하는 예시는 throw new Erorr
로 함수를 아예 다른 곳으로 보내거나 while(true){}
를 통해 무한 반복을 시켜주는 경우이다.
never
타입은 모든 타입의 서브타입이다. 하지만 never
에는 그 어떤 것도 할당할 수 없다. any
조차도 never
에 할당할 수 없다. 아래와 같이 잘못된 타입을 넣는 실수를 막고자 할 때 사용하기도 한다.
위 사진을 간단히 설명하자면, 특정 타입을 받는 T
는 조건이 만족되지 않으면 never
를 반환한다.이 예시에는 Generic
, extends
등이 사용되고, 이후 포스트에서 다룬다.
void
는 어떤 타입을 가지지 않는 상태를 의미한다. 값은 없고 타입만 있어서 void
라는 값을 쓸 수는 없다.
일반적으로 어떤 변수에다 void 타입을 적용하지 않고, 값을 리턴하지 않는 함수에 적용한다. 일종의 undefined를 리턴하는 상태이다.
js를 제외하고는 다른 언어의 함수에서 void
라는 타입을 많이 사용한다. js에서는 undefined
라는 비슷한 타입이 있기 때문에 void
라 하는 타입을 가질 필요가 없었지만, 다른 언어에서도 잘 사용하기 때문에 의미상으로만 해두었다.
undefined
는 void
에 할당이 가능하다.