[TS] any와 unknown (+ never)

조수현·2025년 10월 26일

서론

프로젝트를 진행하면서 any를 정말 쓰고 싶은 순간이 많다
그런 any에 대해 알아보고 대체제인 unknown에 대해서도 알아보자

참고

any

어떤 타입도 가능한 타입

const getValue = (value:any) => {
	//...
}

getValue('hello'); // 에러 없음
getValue(20); // 에러 없음
getValue(true); // 에러 없음
  • 타입을 미리 알 수 없을 때 사용
  • any는 만능이라 타입스크립트를 사용하다보면 남발하고 싶은 욕구가 계속 생긴다
  • 하지만 공식 문서에 작성 되어 있듯이 사용을 권장하지 않는다
  • 요약하자면 자바스크립트에서 타입스크립트로 마이그레이션 상황 외에는 사용하지 말라고 @ts-ignore와 마찬가지라고 함

언제 any타입을 사용할까요?

  • 위에 나와 있듯이 js에서 ts로 마이그레이션 하는 상황에서만 사용하라고 하는 것 같다.
  • 개발 중에 타입이 정의되지 않은 부분은 any 대신 unknown을 사용하라고 적극 권장

unknown

  • 타입을 미리 알 수 없을 때 사용 (any와 동일)
  • any와 동일하게 다양한 타입을 받을 수 있지만 받기만 할 뿐 뒤에서 타입 검사 분기 처리가 없다면 에러가 뜸
  • 강제로 타입 검사 로직이 들어가야 하기 때문에 안정적이라 사용을 권장 함
const getValue = (value:any) => {
	return value + '10' // 에러
}

getValue('hello'); 
getValue(20); 
getValue(true); 
const getValue = (value:unknown) => {
	if(typeof value === string){
    	//...
    }
  //...
}

getValue('hello'); 
getValue(20); 
getValue(true); 

never

절대로 발생할 수 없는 경우에 사용

  • never가 따로 글 쓰기도 애매하고 unknown이랑 은근 부정어라 그런지 비슷하다고 느껴져서 넣었다

never 사용

  • 반환 값이 없고 에러를 throw하는 함수가 대표적인 예시
  • 절대로 반환 값이 있을 수 없다는 표시
  • 런타임 시에 예측이 불가능한 경우를 표시해 주는 역할
const neverReturns = ():never => {
  throw new Error("Never return");
};

마무리

문제가 있으면 그 때 그 때 찾아보고 휘발 되었던 것들을 직접 정리하니 앞으로는 잘 사용할 수 있겠다!

profile
프론트엔드 개발 블로그

0개의 댓글