Closed YunjiNam closed 2 months ago
any 타입은 TypeScript에서 가장 자유로운 타입으로, 어떠한 타입의 값도 할당할 수 있고, 컴파일러는 해당 값의 메서드나 속성 접근에 대해 타입 검사를 하지 않는다. 이는 타입 안정성을 포기하는 것이므로 가능한 사용을 피하는 것이 좋다.
반면, unknown 타입은 any와 비슷하게 어떤 타입의 값이든 할당할 수 있지만, 해당 타입에 대한 명시적인 타입 검사나 타입 단언을 수행하지 않는 한, 해당 값의 메서드나 속성을 사용하거나 접근하는 것에 대해 컴파일러가 에러를 발생시킨다. 이는 더 안전한 방식으로, 알려지지 않은 타입의 값을 다루면서도 타입 안정성을 유지하고자 할 때 유용하다.
공통점: 둘 다 TypeScript에서 타입을 명시적으로 지정하지 않을 때 사용할 수 있는 타입입니다. 모든 타입의 값을 할당할 수 있습니다.
차이점: 타입 검사의 엄격성: unknown: 더 엄격한 타입 검사를 합니다. unknown 타입의 값을 사용하기 전에 타입을 좁히거나 타입 assertion을 해야 합니다. any: 타입 검사를 하지 않습니다. 어떤 연산이나 메서드 호출도 허용됩니다.
타입 안전성: unknown: 타입 안전성을 제공합니다. 잠재적인 타입 오류를 방지할 수 있습니다. any: 타입 안전성을 포기합니다. 런타임 오류의 위험이 있습니다.
사용 목적: unknown: 타입을 알 수 없는 값을 다룰 때 사용합니다. 타입 체크를 강제합니다. any: 타입 검사를 완전히 무시하고 싶을 때 사용합니다.
프로퍼티 접근 및 메서드 호출: unknown: 직접적인 프로퍼티 접근이나 메서드 호출이 불가능합니다. any: 어떤 프로퍼티 접근이나 메서드 호출도 가능합니다.
타입 추론: unknown: 다른 변수에 할당할 때 타입 추론이 되지 않습니다. any: 다른 변수에 할당할 때 해당 변수의 타입도 any가 됩니다.
일반적으로 unknown 타입을 사용하는 것이 any 타입보다 더 권장됩니다. 타입 안전성: unknown은 타입 체크를 강제하므로, 잠재적인 런타임 오류를 컴파일 타임에 잡아낼 수 있습니다.
any 타입의 변수에는 어떤 타입의 값이든 할당할 수 있지만, unknown 타입의 변수에는 any 타입의 값이 아닌 다른 값의 할당을 허용하지 않습니다. 또한 any 타입과 달리 unknown 타입의 값은 해당 값의 속성값에 접근할 수 없습니다. 타입스크립트 컴파일러에서 unknown 타입으로 할당된 경우 에러를 표시하기 때문에 개발 단계에서 타입을 더 강하게 체크할 수 있습니다.
📝 p.84
🧐 unknown 타입과 any 타입은 매우 유사하지만 차이점이 존재하는데요. 둘의 공통점과 차이점에 대해서 설명해주세요~!