
타입스크립트는 참 난해하다. 처음에는 단순히 자바스크립트에서 타입만 좀 더 명확하게 정의한 버전 정도로 생각을 했는데 아니라고 한다.. 😅
단순히 타입을 사용하는 것만으로는 타입스크립트를 온전히 이해할 수 없다고 하니 기초부터 탄탄히.. 자바스크립트에선 볼 수 없던 생소한 타입 any, unknown, never 의 개념과 차이점을 정리해보려고 한다!
any 타입 : 타입스크립트의 안전망을 벗어난 자유로움any 타입은 말 그대로 어떤 타입이든 허용하는 가장 포괄적인 타입이다. 타입스크립트의 타입 검사를 피하고 싶다면 any를 사용할 수 있지만, 이 경우 타입스크립트를 쓰는 의미가 매우매우매우 퇴색된다. 어떤 타입이든 허용할거면 그냥 자바스크립트 쓰는 거나 다름이 없다고 볼 수 있으니..!
let value: any = "hello";
value(); // ⚠️ 컴파일 에러 발생 X (런타임 에러 가능성 있음)
위 코드에서 value는 문자열이다. 하지만 함수처럼 호출한다.
그럼에도 any를 사용하면 컴파일러가 이를 막지 않기 때문에 런타임에서야 비로소 오류가 발생한다.
따라서 any는 최대한 사용을 지양해 타입을 명확하게 정의할 수 있도록 하자!
unknown 타입 : 안전한 anyunknown 타입은 any와 비슷하게 어떤 값이든 받을 수 있다. 하지만 사용하기 전 반드시 타입 검사를 거쳐야만 사용할 수 있는 차이점이 있다.
let value: unknown = "hello";
console.log(value.toUpperCase()); // ❌ 컴파일 에러 발생
if (typeof value === "string") {
console.log(value.toUpperCase()); // ✅ 정상 작동
}
unknown 타입은 직접 연산을 수행할 수 없고, 타입 체크 후에야 안전하게 사용할 수 있다. 즉, any보다 타입 안정성이 높기 때문에, 정말 불가피한 경우라면 any 대신 unknown을 고려하는 것이 좋다.
never 타입 : 절대 발생하지 않는 값never 타입은 어떠한 값도 가질 수 없는 타입이다. 주로 아래와 같은 상황에서 사용된다.
function throwError(): never {
throw new Error("이 함수는 절대 값을 반환하지 않습니다!");
}
type TypeA = string & number; // ❌ `never` 타입이 됨 (불가능한 조합)
즉, never 타입은 주로 함수가 값을 반환할 수 없는 경우나, 절대 실행될 수 없는 코드에서 사용된다.
| 타입 | 특징 및 사용처 |
|---|---|
any | 모든 타입 허용, 타입 검사 없음 (⚠️ 사용 지양) |
unknown | 모든 타입 허용하지만, 타입 검사 후 사용 가능 |
never | 절대 발생하지 않는 값 (예: 무한 루프, 예외 발생) |
any 대신 unknown 사용!never 타입이 필요한 곳에서 적절히 활용하기!