Enum 타입(열거형 타입)은 주로 상수들의 집합을 정의하는데 사용한다. Enum 타입을 이용하면 의도를 문서화하거나 특정 그룹으로 구분되는 집합을 더 쉽게 만들어서 관리할 수 있다. 숫자열거형과, 문자열열거형 타입을 제공한다.
enum Food {
pizza,
chicken,
hamburger,
}
초기화없이 사용할 경우 가장 첫번째 값으로 0부터 차례대로 대입된다.(pizza=0, chicken=1, hamburger=2)
원하는 값이 있으면, 선언적으로 값을 대입할수있는데, 따로 값을 대입하지 않으면 +1씩 자동으로 증가한다.
enum Food {
pizza = 3,
chicken = 100,
hamburger, // 101
}
사용법은 간단한데, 열거형 자체에서 프로퍼티로 접근해서 사용하면 된다.
enum Role {
ADMIN,
READ_ONLY,
AUTHOR
}
const person = {
name: 'GOD',
age: 10001,
role: Role.ADMIN
}
if (person.role === Role.ADMIN) {
console.log('is admin!');
}
문자열 열거형도 사용이 가능하다. 대신 숫자형처럼 자동으로 증가하는 기능은 없다. String enum 타입이 Numeric enum 타입보다 좋은 점은 직렬화가 잘 되어 있어서, 의미를 바로 알 수 있다는 점이다.(숫자만으로는 이게 뭘 뜻하는지 알기 어려울수도 있음)
enum Direction {
UP = 'UP',
DOWN = 'DOWN',
LEFT = 'LEFT',
RIGHT = 'RIGHT'
}
설명을 뭐라고 해야할지 모르겠다..
function getParam<Type>(arg: Type): Type {
return arg;
}
const myGetParam: <Type>(arg: Type) => Type = getParm;
getParam
함수는 제네릭 타입으로 정의된 함수이다. 제네릭 타입이 애니와 다른점은 만일 Type
대신에 any
를 사용했다면, 인수로 number
타입이 들어와도 리턴 값으로 string
타입등 다른 타입을 반환해도 상관이 없다. 하지만 제너릭 타입을 사용하게 되면 유저가 넘긴 인수의 타입을 캡처하고, 이 정보를 반환 타입으로 다시 사용할 수 있게 된다.(즉, 인수와 리턴의 타입이 같다는 것을 보장)
const promise: Promise<string> = new Promise((resolve, reject)=> {
setTimeout(() => {
resolve('Finished');
}, 1500);
});