본문 바로가기
Studying Web Development/Free Memo

[TypeScript] 타입스크립트에서 any, unknown 타입이란?

by Esoolgnah 2022. 7. 27.
728x90

 

❓타입스크립트에서 any, unknown 타입이란?

이 때까지 저는 타입스크립트를 사용하면서 any 타입을 많이 쓰면 타입이 느슨해지므로 타입스크립트를 쓰는 의미가 퇴색되는 것 같아 최대한 지양하며 사용해왔지만, any 타입에 대해 정확히 알지는 못했습니다. 또한 any 타입과 비슷하면서도 다른 unknown 이라는 타입도 있다는 것을 알게되어 함께 공부하게 되었습니다.

 

 

📌 any 타입이란?

any 타입은 타입스크립트에서는 '어떤 타입이든'이라는 의미로 해석할 수 있습니다. 즉, 타입스크립트에서 any 타입은 어떠한 타입도 허용하는 타입인데요. 타입을 엄격하게 검사하고 처리하는 타입스크립트에서 any 타입은 치명적인 존재입니다.

아래의 코드는 변수 valueNumber를 number 타입으로 정의하고 valueNumber의 length를 출력하는 코드입니다.

 

let valueNum : number = 1;
console.log(valueNum.length) // 문제 발생

 

number 타입은 length 프로퍼티가 존재하지 않기 때문에 TypeScript에서 문제가 발생했다고 개발자에게 전달합니다.

 

하지만 number가 아닌 any 타입으로 선언하는 경우 문제가 발생하지 않습니다.

 

let valueAny : any = 1;

console.log(typeof valueAny); // number
console.log(valueAny.length); // undefined

 

변수 valueAny는 typeof 연산자를 사용하여 확인해보면 number 타입입니다.
number 타입은 length 프로퍼티가 존재하지 않지만, 변수 valueAny가 any 타입으로 정의되어 undefined가 출력되었습니다.
타입스크립트는 any 타입에 대해 엄격하게 검사 또는 체크하지 않기 때문에 개발자의 입장에서는 문제가 없는 코드라고 판단할 수 있지만, 실제로 개발하면서 any 타입 때문에 문제가 발생하는 경우가 종종 있습니다.

그렇기 때문에 항상 any 타입을 조심해서 사용해야 합니다.

 

 

📌 unknown 타입이란?

unknownTypeScript 3.0에서 도입된 타입입니다. unknown 타입은  '알 수 없다, 모른다'라는 의미를 가집니다.
any 타입과 동일하게 모든 값을 허용하지만, 할당된 값이 어떤 타입인지 모르기 때문에 함부로 프로퍼티나 연산을 할 수 없습니다.

아래 코드는 unknown 타입을 사용한 코드입니다.

let valueNum : unknown = 10;
let valueStr : unknown = 'Test';

console.log(valueNum.length); // 문제 발생
console.log(valueStr.length); // 문제 발생

 

 

unknown 타입이라 문제 발생가 발생했다는 뜻

 

unknown 타입으로 변수를 정의하면 컴파일러에게 변수의 타입이 'unknown 이라 어떤 값이든 올 수 있으니 엄격하게 검사해라'라고 요청하는 것입니다. 아래와 같이 조건문을 사용하여 타입 검사를 하는 경우에는 문제없이 동작합니다. 하지만 valueNum의 length를 출력하는 부분에서 문제가 발생했습니다.

 

let valueNum: unknown = 10;
let valueStr: unknown = "unknown";

if (typeof valueNum === "number") {
  console.log(valueNum.length); // 문제 발생
}

if (typeof valueStr === "string") {
  console.log(valueStr.length);
}

 

 

console.log(valueNum.length)에서 나타난 경고

 

타입 검사는 정상적으로 되었지만, valueNum이 number 타입이므로 length를 사용할 수 없다는 경고를 전달합니다. 이처럼 unknownany 타입과 비슷하지만 사전에 문제가 되는 부분을 방지할 수 있으므로 any 타입에 비해 안정적으로 개발할 수 있다는 장점이 있습니다.

 

 

📌 요약

any 타입과 unknown 타입에 대한 설명의 요약입니다.

 

any 타입

  • 모든 타입 허용.
  • 타입스크립트에서 타입 검사를 느슨하게 하므로 개발 당시에는 문제가 없으나 개발 후 예기치 못한 문제 발생 가능성 높음.

 

unknown 타입

  • 모든 타입 허용.
  • any 타입과 다르게 프로퍼티 또는 연산을 하는 경우 컴파일러가 체크, 문제 되는 코드를 미리 예방할 수 있음.

 

 

📌 참고

 

 

[TypeScript]타입스크립트 any, unknown 차이

TypeScript에는 다른 프로그래밍 언어에는 존재하지 않는 타입들이 존재합니다. 그중에서 any, unknown이 두 가지 타입은 제대로 이해하지 않으면, 상당히 헷갈리는 타입이며, 스택오버플로우에서도

developer-talk.tistory.com

 

 

 

반응형

댓글