본문 바로가기

Typescript/타입 기능

기본 타입 외 여러 종류의 타입

Enum 타입

열거형으로 Enum를 사용하면 이름이 붙은 상수 셋을 정의합니다. enum타입을 사용하게 특수한 변수를 사용하게 되는경우 가독성이 좋아집니다.

enum MyInfo {
  Name = '개발자',
  Age = 32
}

console.log(MyInfo.Name) // result => '개발자'
console.log(MyInfo.Age) // result => 32

Generic 타입

제네릭은 클래스와 함수에서 사용하는 타입을 추상화해 외부로부터 구체적인 타입을 지정합니다. 외부에서 지정된 타입이 달라도 작동하도록 범용적인 클래스나 함수를 정의할 때 편리합니다.

// T는 클래스안에서 임시 타입이다.
class Queue<T> {
  private arr: T[] = []
  
  push(item:T){
    this.arr.push(item) 
  }
  pop(): T|undefined {
    return this.arr.shift()
  }
}

const que = new Queue<number>()
que.push(1)
que.push(2)
que.push('test') // error, 타입이 number가 아님

let str = 'strTest'
str = que.pop() // error, str 은 number가 아님

Union 타입

합집합을 의미하는 타입 정의 방법입니다. 

function funTest (param: string|number) {
  console.log(param)
}
funTest(1) // OK
funTest('test') // OK

Intersection 타입

교집합을 의미합니다.

type Type1 = {
  name: string,
  weight: number
}

type Type2 = {
  id: string,
  age: number
}

type MyInfo = Type1 & Type2


// OK
const myInfo: MyInfo = {
  name: '개발자',
  weight: 80,
  id: 'testId',
  age: 32
} 

// error , Type1 정보만으로 변수를 정의할 수 없습니다. Type2의 변수도 정의해 주어야 합니다.
const myInfo2: MyInfo = {
  name: '개발자2',
  weight: 80
}

리터럴 타입

리터럴 타입을 사용하면 정해진 문자열이나 숫자를 대입할 수 있는 타입을 제어할 수 있습니다.

let temp: 'test1' | 'test2' | 'test3'

temp = 'test2' // OK
temp = 'test4' // error, 타입 선언에 없는 문자열 입니다.

// 반환 타입도 정의 할 수있습니다.
function funTest() : -1 | 0 | 1 {
  return -1 // OK
 // return 2 // error
}

never 타입

never 타입은 절대로 발생하지 않는 값을 나타냅니다. 예를 들어 항상 예외를 발생시키는 함수에서 절대로 값이 반환되지 않는 반환값의 타입을 never로 지정합니다.

function error(msg:string):never{
  throw new Error(msg)
}

function funTest(param: string|number|number[]): boolean {
  if(typeof param === 'string'){
    return true
  }else if (typeof param === 'number')
  
  return error('Never')
}

funTest(['test1','test2']) // error, function error가 실행된다

'Typescript > 타입 기능' 카테고리의 다른 글

Typescript - 고급 기능  (0) 2023.06.27
타입 Alias, Interface, Class  (0) 2023.06.25
타입 Assertion (명시적으로 타입을 정의)  (0) 2023.06.25