열거형(Enum)
이넘은 특정 값들의 집합을 의미하는 자료형이다.
열거형은 숫자형 이넘, 문자형 이넘으로 나뉜다.
숫자형 이넘
enum Direction {
Up = 1,
Down,
Left,
Right,
}
console.log(Direction);
// Up: 1,
// Down: 2,
// Left: 3,
// Right: 4
열거형은 숫자형과 문자열형, 혹은 이 둘의 조합으로 정의될 수 있습니다. 디폴트 값으로 숫자형을 사용하며, 각 값은 자동으로 0부터 시작하여 1씩 증가합니다. 그러나 다음과 같이 수동으로 값을 지정할 수도 있습니다.
문자형 이넘
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
console.log(Direction);
// { Up: 'UP', Down: 'DOWN', Left: 'LEFT', Right: 'RIGHT' }
문자형 이넘은 숫자형 이넘과 다르게 auto-incrementing이 없다. 그렇기 때문에
문자형 이넘은 이넘 값 전부 다 특정 문자 또는 이넘 값으로 초기화 해줘야한다.
이렇게 열거형을 사용하면 오타와 같은 실수를 방지할 수 있으며, 코드의 가독성과 안정성을 높일 수 있습니다.
타입 별칭 (Type Aliases)
변수를 선언하듯 타입을 별도로 정의할 수 있다. 타입 별칭(Type Aliases)은 타입의 새로운 이름을 만드는 것입니다. 이는 새로운 이름으로 기존의 타입을 참조하는 것을 의미합니다. 타입 별칭을 이용하여 타입의 새로운 이름을 만들 때 키워드 type을 사용하여 작성합니다.
type User = {
id: number;
name: string;
nickname: string;
};
위처럼 만든 타입 별칭을 아래와 같이 이용할 수 있다. 이런 방식으로 타입 별칭을 사용하면 코드를 더 간결하고 가독성 좋게 만들 수 있습니다. 또한 복잡한 타입을 간략하게 표현하고, 타입 정의를 재사용하는 등 가독성을 높일 수 있습니다.
type User = {
id: number;
name: string;
nickname: string;
};
let user: User = {
id: 1,
name: "plla2",
nickname: "seung",
};
let user2: User = {
id: 2,
name: "plla",
nickname: "hyun",
};
console.log(user); // { id: 1, name: 'plla2', nickname: 'seung' }
console.log(user2); // { id: 2, name: 'plla', nickname: 'hyun' }
이처럼 인터페이스나 다른 변수를 정의할 때 타입 별칭으로 정의한 타입을 참조하게 됨으로써 코드를 더 간결하고 가독성 좋게 만들 수 있습니다. 타입 별칭으로 만들어진 타입을 참조할 시에는 인터페이스와 마찬가지로 내부에 정의된 프로퍼티를 전부 참조해야만 합니다. 또한 타입 별칭으로 만들어진 타입 내부에 정의된 프로퍼티 외에 다른 프로퍼티를 더 작성하게 되면 그 또한 컴파일 에러가 납니다.
타입 추론
타입 추론의 기본
타입 추론(Type Inference)은 변수나 함수의 타입을 선언하지 않아도 TypeScript가 자동으로 유추하는 기능입니다. 예를 들어, 다음과 같은 코드를 살펴보겠습니다.
let isNumber = 123;
이 코드에서는 변수 isNumber를 선언하고, 숫자 123을 할당했습니다. 이 경우, 타입스크립트는 isNumber의 타입을 자동으로 숫자(Number)로 추론합니다.
최적 공통 타입
TypeScript는 여러 표현식에서 타입 추론이 발생할 때, 해당 표현식의 타입을 사용하여 "최적 공통 타입"을 계산합니다. 아래와 같은 코드가 있다고 가정해 보겠습니다.
let x = [0, 1, null];
위 예제의 x 타입을 추론하려면 각 배열 요소의 타입을 고려해야 합니다. 여기서 배열의 타입으로 고를 수 있는 두 가지 후보가 있습니다: number와 null입니다. 최적 공통 타입 알고리즘은 각 후보의 타입을 고려하여, 모든 후보의 타입을 포함할 수 있는 타입을 선택합니다.
문맥상의 타이핑
타입스크립트에서 타입을 추론하는 또 하나의 방식은 바로 문맥상으로 타입을 결정하는 것입니다. 이 문맥상의 타이핑(타입 결정)은 코드의 위치(문맥)를 기준으로 일어납니다. 다음과 같은 함수를 살펴보겠습니다.
function add(a, b) {
return a + b;
}
add 함수는 두 개의 매개변수를 받아 더한 값을 반환합니다. 하지만 매개변수의 타입이 명시되어 있지 않습니다. 이 경우, 타입스크립트는 매개변수 a와 b의 타입을 자동으로 추론했습니다. 만약 매개변수 a와 b가 모두 숫자(Number) 타입이라면, add 함수의 반환 값도 숫자(Number) 타입으로 추론됩니다.