본문 바로가기

프로그래밍기초/typescript

#07 TypeScript - Any와 Unknown 타입

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)

 
반응형