오늘은 타입스크립트의 고급타입인 any와 unknown 에 대해 학습했다.
과거 타입이 불분명할 때 any타입을 주로 사용했었는데 사용하다보니 점점 any 사용이 빈번해지고 추후에 any타입을 모두 없애느라 고생했던 기억이 난다. 그때는 any는 모든 타입을 허용하고 사용을 지양해야 된다 정도만 알고있었던 정도였지만 오늘 학습을 통해 any타입에 대해 완벽히 파악할 수 있었고 unknown타입은 사용해보지 않았지만 어떤 상황에서 사용해야하는지 학습할 수 있었다.
any 타입
TypeScript의 any 타입은 자바스크립트의 모든 자료형과 매핑될 수 있습니다. 자바스크립트의 typeof 연산자나 Object.prototype.toString.call(...)로는 any라는 타입을 찾을 수 없으며, 이는 TypeScript에만 존재하는 독자적인 타입 시스템입니다. any 타입은 자바스크립트에서 모든 값이 허용되는 특성을 반영하며, 모든 타입을 허용해 유연성을 제공합니다.
그러나, any 타입은 TypeScript의 정적 타이핑의 이점을 무색하게 만들 수도 있습니다. 어떤 값이든 할당할 수 있으며, 이를 통해 컴파일 타임에 오류를 방지하지 못할 수 있기 때문에 any 타입의 사용을 자제하는 것이 좋은 습관입니다. 다만, 어쩔 수 없이 any를 사용해야 하는 경우도 존재합니다.
any 타입을 사용하는 경우
- 개발 단계에서 임시로 값을 지정할 때
개발 과정 중 특정 값이 확정되지 않았거나 변경될 가능성이 있는 경우, any 타입을 통해 경고 없이 빠르게 개발을 진행할 수 있습니다. - 받거나 넘겨줄 값의 타입을 특정할 수 없을 때
API 요청과 응답 처리, 콜백 함수 전달, 외부 라이브러리의 불명확한 타입 등에서 any를 사용할 수 있습니다. 예를 들어, API 응답 타입을 정확히 알 수 없는 경우, any 타입으로 유연하게 대응할 수 있습니다.
async function fetchData(url: string): Promise<any> {
const response = await fetch(url);
return response.json(); // response.json()의 리턴 타입은 Promise<any>
}
3. 외부 라이브러리나 API의 반환 값이 다양할 때
다양한 타입을 반환하는 API, 특히 브라우저의 Fetch API처럼 여러 형식을 반환할 수 있는 경우에도 any를 사용할 수 있습니다.
unknown 타입
TypeScript 3.0부터 추가된 unknown 타입은 모든 타입을 할당받을 수 있는 유연성을 제공하면서도 any와 달리 사용 시 타입 검사를 강제합니다. 이는 any보다 안전한 방식으로 불확실한 값을 처리할 수 있게 해줍니다.
unknown 타입을 사용하는 경우
- 타입을 알 수 없는 값이 예상될 때
unknown은 어떤 타입이 들어올지 알 수 없을 때 사용됩니다. 다만, 값을 사용할 때는 타입 검사를 강제하므로 예상치 못한 타입 관련 오류를 방지할 수 있습니다. - 안전한 타입 검사가 필요할 때
unknown은 불확실한 값에 대해 타입 검사와 안전한 처리를 보장하기 때문에, 다루는 값의 타입이 확정되기 전까지 최대한 안전하게 유지하고 싶을 때 사용됩니다.
function processData(data: unknown) {
if (typeof data === "string") {
console.log(data.toUpperCase()); // 타입 검사를 거쳐야만 사용 가능
}
}
any vs unknown 비교
타입 | 설명 | 특징 |
any | 어떤 타입이든 any 타입에 할당 가능, any 타입은 어떤 타입으로도 할당 가능 (never는 제외 ) , 타입 검사 없이 사용 가능 |
유연하지만 안전성 부족 |
unknown | 어떤 타입이든 unknown 타입에 할당 가능, unknown타입은 any타입 외에 다른 타입으로 할당 불가능 , 타입 검사 후에만 사용 가능 |
유연하면서도 타입 안정성을 제공 |
- any는 일시적인 타입 지정이나 불명확한 API 응답 처리 시 유용하지만, 오류 검출의 한계로 인해 꼭 필요한 경우에만 사용을 권장합니다.
- unknown은 타입을 알 수 없는 값을 보다 안전하게 다룰 수 있어, 타입 안정성을 유지해야 하는 상황에서 추천됩니다.
any와 unknown은 모두 모든 값을 허용한다는 공통점이 있지만, 타입 안정성 측면에서는 unknown이 보다 엄격하고 안전하게 사용할 수 있는 타입입니다.
'TypeScript' 카테고리의 다른 글
TypeScript의 Array타입에 대해 알아보자 (+ Tuple타입) (0) | 2024.11.11 |
---|---|
객체 타입을 선언할 때 type ? interface ? 어떤 것을 사용해야하나 (3) | 2024.11.07 |
TypeScript 2일차 / TypeScript 문법을 뿌셔보자 ( 열거형, 인터페이스 ,타입 별칭) (0) | 2023.05.31 |
TypeScript 1일차 / TypeScript 기초를 뿌셔보자 ! (0) | 2023.05.30 |