[TS] any, unknown 타입

cabbage·2023년 1월 31일

TS

목록 보기
3/4
post-thumbnail

any 타입

타입스크립트에는 any 라는 특별한 타입이 존재한다. 타입체킹 에러가 발생하지 않도록 any 타입을 사용할 수 있다.

타입스크립트의 any 타입은 모든 타입을 열어 놓은 자바스크립트와 같다고 볼 수 있다.

const getAny = (arg1: any, arg2: any, arg3: any): [any, any, any] => {
  console.log(arg1 + 100); // any는 아무거나 다 됨!😡
  return [arg3, arg2, arg1];
};

const result2 = getAny("철수", 123, true);
  • 함수의 입력값의 타입을 알 수 없을 때는 any 타입으로 지정할 수 있다.
  • any 타입의 입력값에 대해 출력되는 값의 타입도 알 수 없기 때문에 any 타입으로 지정하였다.
  • arg1 매개변수가 어떤 타입인지 모르기 때문에, 에러가 발생하지 않고 100을 더할 수 있다.

any 타입으로 하지 말아야 할 것

자바스크립트 프로젝트를 타입스크립트로 마이그레이션하는 경우가 아니라면 any 타입을 사용하지 말 것

  • 컴파일러는 any를 "타입 체크를 진행하지 않는다"로 취급한다.
  • any 타입은 자바스크립트 프로젝트를 타입스크립트로 처음으로 마이그레이션하는 경우에는 유용하다.
  • 하지만 타입스크립트 프로젝트에선 타입체킹 기능을 해제하는 것과 같다.
  • 어떤 타입을 사용해야 할지 모르겠거나 어떤 값이라도 받고 싶은 경우에는 unknown을 사용할 수 있다.

unknown 타입

unknown 타입은 모든 값을 나타낸다. any 타입과 유사하지만, any 타입보다 안전하다. 왜냐하면 unknown 값으로 작업하는 것이 허용되지 않기 때문이다.

unknown 타입에는 any 타입처럼 모든 타입이 들어갈 수 있지만, 아직 어떤 타입을 사용해야 할지 모를 때 사용하는 타입이다.

함수에서 any 타입의 값을 받지 않고 싶지만, 어떤 값이라도 받고 싶은 경우에 unknown 타입이 유용하다.

const getUnknown = (arg1: unknown, arg2: unknown, arg3: unknown): [unknown, unknown, unknown] => {
  // arg1의 값이 어떤 타입인지 먼저 확인해야 한다.
  if (typeof arg1 === "number")
    // any 타입보다 안전한 코딩이 가능하다.
    console.log(arg1 + 100);
  return [arg3, arg2, arg1];
};

const result3 = getUnknown("철수", 123, true);
  • 어느 타입의 값이 들어올지 모르므로, 출력 값의 타입도 unknown이다.
  • any 타입과 다르게 unknown 타입에는 곧바로 + 연산자를 적용할 수 없기 때문에 타입이 number 타입인지 먼저 확인해야 한다.
  • any 타입보다 안전하게 사용할 수 있다.

참고

profile
캐비지 개발 블로그입니다. :)

0개의 댓글