Web/TypeScript

[TS] any 타입, unknown 타입, void 타입, never 타입

ansui 2024. 11. 7. 23:08

any 타입

특정 변수의 타입을 우리가 확실히 모를 때 어떤 타입이던지 넣을 수 있다.

모든 타입의 값을 할당 받을 수 있고 모든 타입의 변수에 넣을 수 있다.

// any 타입
let anyVar: any = 10;
anyVar = "hello";
anyVar = true;
anyVar = {};
anyVar = () => {};
anyVar.toUpperCase(); // 런타임 시 오류 발생하므로 최대한 사용하지 않는 것이 좋다.
anyVar.toFixed();

let num: number = 10;
num = anyVar;

unknown 타입

any 타입과 비슷하지만 함수, 연산이 불가능하고 변수에 넣는 것을 불가능하다.

// unknown 타입
let unknownVar: unknown;
unknownVar = "hello";
unknownVar = true;
unknownVar = {};
unknownVar = () => {};

// 함수, 연산 불가능
unknownVar.toUpperCase();
unknownVar.toFixed();

// 변수에 넣는 것은 불가능
num = unknownVar;

// 타입 정제 or 타입 좁히기를 통해 변수에 넣는 것은 가능
if (typeof unknownVar === "number") {
  num = unknownVar;
}

void 타입

공허 → 아무것도 없다

변수에 undefined를 넣는 것은 가능하지만 다른 것을 넣는 것을 모두 불가능하다.

// void 타입

// 함수에도 return 값의 타입을 지정할 수 있다.
function func1(): string {
  return "hello";
}

// 아무것도 반환하고 싶지 않을 때 사용
function func2(): void {
  console.log("hello");
}

// null을 반드시 반환해야한다. 아무것도 반환하지 않으면 오류 발생
function func3(): null {
  return null;
}

let a: void;
// undefined는 가능
a = undefined;

// 모두 불가능
a = 1;
a = {};
a = "";
a = null; //"strictNullChecks": false시 가능

never 타입

존재하지 않는 불가능한 타입

변수에 값을 넣는 것은 모두 불가능하다.

// never 타입

// 종료되지 않기 때문에 반환할 수 없는 경우
function func4(): never {
  while (true) {}
}

// 실행하면 바로 프로그램이 중지되는 경우
function func5(): never {
  throw new Error();
}

let b: never;
let anyVar: any;

// 모두 불가능
b = 1;
b = {};
b = "";
b = undefined;
b = null; //"strictNullChecks": false로 바꿔도 불가능
b = anyVar;

 


이정환님의 인프런 강의 "한 입 크기로 잘라 먹는 타입스크립트(TypeScript)"를 참고하여 작성하였습니다.