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 |