any: 다됨 unknown: 저장은 되지만 반대의 경우는 안됨.

백아름·2023년 7월 10일
0

프론트엔드

목록 보기
62/80

any

  • 특정 변수의 타입을 우리가 확실히 모를 때 사용함.
  • any 타입은 안쓰는 것이 좋음.
    : any는 저장 및 꺼내쓰는 것 모두 다 돼서 변환 시 typeError를 일으키게 되는 문제가 있음.

unknown

  • any와의 차이점
    : unknown값은 any타입과 똑같이 모든 값을 저장할 수 있지만, 반대의 경우는 안됨. any타입은 반대의 경우도 가능했음.

  • unknown 타입은 num 타입에 값을 집어넣을 수 없음

  • 어떤 타입인지 모를 때는 any 타입보다는 unknown 타입을 쓰는게 더 안전함.
    : unknown은 any와 다르게 아무변수할당, 메서드, 연산 등이 제약되기 때문임.

  • unknown타입은 num = unknownVar; 이런 식으로 num타입뿐만 아니라 모든 타입의 값에 unKnown타입의 값을 집어넣을 수 없음.

  • unknownVar.toUpperCase(); 이런식으로 .toUpperCase()와 같은 메서드를 사용하는 것도 안됨.

타입 정제

  • 연산(덧, 뺄, 나, 곱)도 unknwon type에서는 사용할 수 없음.
    -> 단, 사용하고 싶다면 확실하게 unknown 타입변수가 어떤 타입인지 밝혔을 때에만, 정제해서 사용할 수 있음.
    -> 이를 type 정제라고 부름.
    다음이 예시임.
// type 정제
if (typeof unknownVar === "number") {
  num = unknownVar;
}

전체 예시

// any
// 특정 변수의 타입을 우리가 확실히 모를 때
// any 타입은 안쓰는 것이 좋음.

let anyVar: any = 10;
anyVar = "hello";
anyVar = true;
anyVar = {};
anyVar = () => {};

anyVar.toFixed();

let num: number = 10;
num = anyVar;
// 이렇게 any타입은 넘버타입에도 값을 집어넣을수 있었음.

// unknown
// any와의 차이점: unknown값은 any타입과 똑같이 모든 값을 저장할 수 있지만, 반대의 경우는 안됨. any타입은 반대의 경우도 가능했음.
// unknown 타입은 num 타입에 값을 집어넣을 수 없음
// 어떤 타입인지 모를 때는 any 타입보다는 unknown 타입을 쓰는게 더 안전함.  unknown은 any와 다르게 아무변수할당, 메서드, 연산 등이 제약되기 때문임.
// any는 다 돼서 변환 시 typeError를 일으키게 되는 문제가 있음.

let unknownVar: unknown;

unknownVar = "";
unknownVar = 1;
unknownVar = () => {};

// num = unknownVar; // num타입뿐만 아니라 모든 타입의 값에 unKnown타입의 값을 집어넣을 수 없음.
// unknownVar.toUpperCase(); // .toUpperCase()와 같은 메서드를 사용하는 것도 안됨.
// 연산(덧, 뺄, 나, 곱)도 언논타입에서는 사용할 수 없음.

// 단, 사용하고 싶다면 확실하게 unknown 타입변수가 어떤 타입인지 밝혔을 때에만, 정제해서 사용할 수 있음. 다음이 예시임.
// type 정제
if (typeof unknownVar === "number") {
  num = unknownVar;
}
profile
곧 훌륭해질 거에요!

0개의 댓글