
any는 모든 타입의 값을 허용하며, TypeScript의 타입 검사 시스템을 우회하는 특수한 타입- 즉, 해당 변수에 어떠한 값이 들어와도 컴파일러 오류가 발생하지 않음
let anyVar: any = 10; // 숫자
anyVar = "hello"; // 문자열
anyVar = true; // 불리언
anyVar = [1, 2, 3]; // 배열
anyVar = { name: "홍길동", age: 26 }; // 객체
anyVar = () => {}; // 함수
any는 말 그대로 "어떤 것이든 허용" 을 의미function getDataFormLegacyAPI(): any {
return JSON.parse("{ name: 'KJY' }");
}
any는 기존 JavaScript 코드에서 TypeScript로 전환하는 과정에서 임시로 사용되기도 함let anyVar: any = [1, 2, 3];
anyVar.toUpperCase(); // ❌ 런타임 에러 발생
TypeError: anyVar.toUpperCase is not a function
any 타입은 컴파일러가 타입 검사를 생략하므로, 어떤 메서드를 호출하든 오류 없이 컴파일anyVar가 문자열이 아니라 배열(Array)이기 때문에 toUpperCase()라는 메서드는 존재하지 않음
any타입은 컴파일 타임에 오류를 막아주지 않기 때문에, 잘못된 메서드 호출이 런타임 에러로 이어질 수 있는 위험한 타입
unknown은 어떤 타입이 들어올지 알 수 없을 때 사용하는 타입
any와 비슷해 보일 수 있지만, 타입 안정성을 보장한다는 점에서 완전히 다름
unknown 타입의 변수는 직접 사용 불가능any보다 더 안전한 타입이라고 할 수 있음정답은 사용 가능 !!!
if (typeof unknownVar === "number") { num = unknownVar; }
- unknown 타입은 타입 체크 후에만 사용 가능
- 이러한 과정을
타입 정제또는타입 좁히기라고 칭함
❌ 타입 검사 없이 사용 시 오류 발생
let unknownVar: unknown;
unknownVar = "hello";
console.log(unknownVar.toUpperCase());
✅ 타입 검사 후 안전하게 사용
if (typeof unknownVar === "number") {
num = unknownVar; // unknown 타입은 타입 체크 후에만 사용 가능
}
✅ 타입 좁히기(Type Narrowing)의 예
function handleData(data: unknown) {
if (typeof data === "number") {
console.log(data.toFixed(2));
} else if (typeof data === "string") {
console.log(data.toUpperCase());
} else {
console.log("지원하지 않는 타입입니다.");
}
}
unknown 타입은 사용 전 타입을 확인하도록 강행| 항목 | any | unknown |
|---|---|---|
| 타입 검사 | 생략됨 (모든 타입 허용) | 사용 전 반드시 타입 검사 필요 |
| 안전성 | 매우 낮음 | 비교적 높음 (런타임 오류 예방 가능) |
| 타입 추론 | 불가능 | 불가능 |
| 사용 목적 | 빠르게 개발할 때 / 임시 타입 | 타입을 알 수 없지만 안정성을 보장하고 싶을 때 |
| 자동완성 | X | X |
한 입 크기로 잘라먹는 타입스크립트
https://www.inflearn.com/course/한입-크기-타입스크립트/dashboard