[TS] Any / Unknown / Void / Never

DT-HYUNJUN·2023년 12월 8일

Typescript

목록 보기
5/11

Any / Unknown / Void / Never

Any / Unknown

any타입과 unknown타입은 둘 다 특정 변수의 타입을 우리가 확실히 모를 때 부여할 수 있는 타입이다.

하지만 두 개의 타입은 서로 다른 점을 가지고 있다.

Any

any타입은 말 그대로 어떠한 타입도 될 수 있는 타입이다.

심지어 객체나 함수가 들어와도 타입 에러가 발생하지 않는다.

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

반대로 any타입을 다른 타입에 대입할 수 있다.

let num1: number = 10
num1 = anyVar

또한 어떠한 타입도 될 수 있기에 여러 메서드들도 사용할 수 있다.

anyVar.toUpperCase()
anyVar.toFixed()

하지만 any타입을 사용할 때는 런타임 에러를 조심해야 한다.

let anyVar: any = 10

anyVar = true
anyVar.toUpperCase()

위 코드는 any타입을 가진 anyVar변수에 true값을 부여하고 .toUpperCase()메서드를 실행하는 코드다.

이 상태로 컴파일을 하고 실행시키면, 컴파일시에는 타입 에러가 발생하지 않지만, 실행환경에서는 true값을 가진 anyVar에 string메서드인 .toUpperCase()를 실행하고 있으니 런타임에러가 발생한다.

때문에 any타입은 런타임 에러를 조심해야 한다.

Unknown

unknown타입은 any타입과 마찬가지로 어떠한 타입의 값도 저장할 수 있다.

let unknownVar: unknown
unknownVar = "Hi"
unknownVar = 10
unknownVar = () => {}

하지만 any타입과 다른점은 unknown타입의 값을 다른 타입에 대입할 수 없다.
또한 메서드들도 사용이 불가능하다.

let num1: number = 10

num1 = unknownVar 			// error
unknownVar.toUpperCase() 	// error

Void / Never

voidnever도 서로 비슷하지만 약간의 차이점이 있다.

Void

void아무것도 없음을 의미하는 타입이다.

주로 함수의 반환 타입에 쓰이는 타입이다.

예를 들어 "Hello"를 반환하는 타입의 경우에은 반환 타입을 string으로 적어주면 된다.

function func1(): string {
  return "Hello"
}

하지만 아무 것도 반환하지 않는 함수의 경우에도 반환 타입을 적어줘야 하는데, 이때 void를 반환 타입으로 지정하면 된다.

function func2(): void {
  console.log("Hello")
}

Never

never존재하지 않는 타입을 말한다.

다른 말로 불가능한 타입이라고 부른다.

예를 들어 무한 루프를 도는 함수 같은 경우에는 어떠한 값도 반환하지 않는 경우never타입을 반환 타입으로 지정할 수 있다.

function func3(): never {
  while(true) {}
}

또는 에러를 발생시키고 종료하는 함수 같은 경우에도 반환 타입으로 never를 쓸 수 있다.

function func4() {
  throw new Error()
}

0개의 댓글