any와의 차이점
: unknown값은 any타입과 똑같이 모든 값을 저장할 수 있지만, 반대의 경우는 안됨. any타입은 반대의 경우도 가능했음.
unknown 타입은 num 타입에 값을 집어넣을 수 없음
어떤 타입인지 모를 때는 any 타입보다는 unknown 타입을 쓰는게 더 안전함.
: unknown은 any와 다르게 아무변수할당, 메서드, 연산 등이 제약되기 때문임.
unknown타입은 num = unknownVar;
이런 식으로 num타입뿐만 아니라 모든 타입의 값에 unKnown타입의 값을 집어넣을 수 없음.
unknownVar.toUpperCase();
이런식으로 .toUpperCase()와 같은 메서드를 사용하는 것도 안됨.
// 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;
}