Any
any는 타입 검사를 완전히 포기하는 타입이다.
TypeScript의 타입 시스템을 사실상 비활성화한다.
모든 타입의 값을 담을수 있다.
특징
- 어떤 타입의 값이든 할당 가능
- 어떤 연산, 프로퍼티 접근, 함수 호출도 에러 없이 허용
- 컴파일 타임 타입 체크가 이루어지지 않음
- 런타임 오류 가능성이 매우 높음
let value: any;
value = 10;
value = "hello";
value = {};
value.toUpperCase(); // 컴파일 에러 없음
value.foo.bar(); // 컴파일 에러 없음
실제 실행 시 오류가 발생할 수 있으나, 컴파일러는 이를 막지 못한다.
Unknown
unknown은 타입을 알 수 없음을 명시적으로 표현하는 타입이다.
any와 달리, 사용 전에 타입 검증을 강제한다.
특징
- 어떤 타입의 값이든 할당 가능
- 직접적인 연산, 프로퍼티 접근, 함수 호출 불가
- 타입 가드 또는 타입 단언 후에만 사용 가능
- 타입 안정성을 유지함
let value: unknown;
value = 10;
value = "hello";
value.toUpperCase(); // ❌ 컴파일 에러
타입을 좁힌 뒤(Type Narrowing) 사용해야 한다.
if (typeof value === "string") {
value.toUpperCase(); // ✅ 가능
}
any 와 unknown 비교
| 항목 | any | unknown |
| 값 할당 | 가능 | 가능 |
| 연산/접근 | 즉시 가능 | 불가능 |
| 타입 검사 | 하지 않음 | 강제 |
| 타입 안정성 | 매우 낮음 | 높음 |
| 권장 용도 | 임시, 레거시 | 외부 입력 처리 |
any는
- 기존 JavaScript 코드 마이그레이션 초기 단계
- 타입 정의가 불가능한 외부 라이브러리 대응 (최소화 권장)
- 타입스크립트를 사용하지 않는 것과 거이 동일
unknown
- API 응답, 사용자 입력, JSON 파싱 결과
- 타입이 확정되지 않았으나 안전하게 처리해야 하는 경우
- 특별한 이유가 없다면 unknown을 우선적으로 사용하는 것이 좋다. (안전한 any)
반응형