TypeScriptMedium#434
unknown과 any의 차이점은 무엇이며 왜 unknown이 더 안전한가요?
#TypeScript#unknown#any#타입안전성
답변 포인트
타입을 모르는 값에 대해 바로 속성 접근이나 함수 호출을 허용하는지 비교해보세요.
정답 및 해설
빠른 요약
`any`와 `unknown`은 모두 타입을 정확히 모르는 값을 표현할 수 있지만, 안전성은 완전히 다릅니다. `any`는 타입 검사를 사실상 꺼버립니다.
any와 unknown은 모두 타입을 정확히 모르는 값을 표현할 수 있지만, 안전성은 완전히 다릅니다.
any는 타입 검사를 사실상 꺼버립니다. 어떤 속성에 접근해도, 함수처럼 호출해도, 다른 타입 변수에 넣어도 컴파일러가 막지 않습니다. 빠르게 우회할 수는 있지만 런타임 오류를 숨기기 쉽습니다.
unknown은 “정말 모르는 값”입니다. 값을 받는 것은 허용하지만, 사용하려면 먼저 타입을 좁혀야 합니다.
TypeScript
function parse(value: unknown) {
if (typeof value === 'string') {
return value.toUpperCase();
}
if (typeof value === 'number') {
return value.toFixed(2);
}
return null;
}외부 API 응답, JSON.parse 결과, catch error처럼 런타임에 무엇이 들어올지 확실하지 않은 값에는 unknown이 적합합니다. 이후 타입 가드, schema validation, instanceof 등을 통해 안전하게 좁힐 수 있습니다.
면접에서는 “any는 타입 시스템 탈출구, unknown은 타입 확인을 강제하는 안전한 경계 타입”이라고 설명하면 좋습니다.