Web-Frontend/TypeScript

[TS] 타입스크립트의 특이한 타입 (any, unknown, never)

서노리 2023. 11. 8. 17:37
반응형

any

  • 아무 타입이나 될 수 있다는 뜻으로 타입의 보호를 받지 않기를 원할 때 사용
  • 비어있는 값을 쓰면 기본적으로 any가 됨
  • 자주 사용하는 것은 권장되지 않음
let a = [] // a는 any 타입

const a: any[] = [1, 2, 3]
const b: any = true

a + b // 오류가 나지 않는다.

 

unknown

  • 변수의 타입을 미리 알지 못할 때 사용
  • 어떠한 작업을 할 경우 해당 변수의 타입을 먼저 확인한 뒤 사용해야함
let a: unknown
let b = a + 1 // 에러 발생 (타입확인 필요하다.)

// 사용할 때 마다 변수 타입을 지정해야한다.
if(typeof a === 'number'){
    let b = a + 1
}

if(typeof a === 'string'){
    let b = a.toUpperCase()
}

 

never

  • 함수가 절대 return하지 않을 때 발생
  • void와 차이점은 void는 자동으로 undefined를 return
  • return하지 않고 오류를 발생시키는 함수의 타입으로 사용
  • 자주 사용되지는 않으나 중요함
// 1.함수에서 exception(예외)발생할 경우
function hello(): never {
  return ‘hello’ // 에러
}

function fail(msg: string): never {
  throw new Error(msg); // 에러나지 않음
}

// 2. 타입이 두가지 일 수도 있는 경우
function hello(name: string | number) {
  if(typeof name === ‘string’) { 
    name // name: string
  }  
  else if(typeof name === ‘number’) {
    name // name: number
  } 
  else {
    name // name: never
    //두 타입 모두 확인했기 때문에 해당 영역은 절대 실행되면 안된다.
  } 
}

 

반응형