특정 값의 집합을 정의할때 사용한다. 숫자열 열거형와 문자형 열거형을 지원한다.
enum Color {
Red = 1,
Green = 2,
Blue = 4,
}
let c: Color = Color.Green;
let greenValue: number = Color.Green;
let blueValue: number = Color.Blue;
console.log(c); // 출력: 2
console.log(greenValue); // 출력: 2
console.log(blueValue); // 출력: 4
열거형은 가독성을 높게 만들어주고 오타와 같은 실수를 방지 해준다.
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
let myDirection: Direction = Direction.Up;
console.log(myDirection); // 출력: "UP"
문자형 열거형에는 숫자형 열거형과 다르게 auto-incrementing
이 없어 항상 명확한 값이 나와 읽기 편하다.
주로 문자열 열거형은 외부에서 가져온 값을 다루기 위해 사용한다. 그 예로 HTTP요청 방식을 나타내는 열거형을 정의할 수 있다.
enum HttpMethod {
Get = "GET",
Post = "POST",
Put = "PUT",
Delete = "DELETE",
}
function makeRequest(url: string, method: HttpMethod) {
(생략)
}
makeRequest("/api/data", HttpMethod.Post);
enum Enum {
A
}
let a = Enum.A;
let nameOfA = Enum[a]; // "A"
type
을 사용해서 작성.type Person = {
id: number;
name: string;
email: string;
}
//Commentary 인터페이스에서 Person 타입을 참조.
interface Commentary {
id: number;
content: string;
user: Person;
}
//객체에서 Commentary 인터페이스를 참조.
let comment1: Commentary = {
id: 1,
content: "뭐예요?",
user: {
id: 1,
name: "김코딩",
email: "kimcoding@abcd.com",
},
}
// Commentary를 참조하고 있기 때문에 content 프로퍼티를 작성하지 않아서 컴파일 에러 발생.
let kimcoding: Commentary = {
id: 1,
user: {
id: 1,
name: "김코딩",
email: "kimcoding@abcd.com",
},
};
// Person 타입 내부에 isDeveloper 프로퍼티가 존재하지 않기 때문에 isDeveloper 프로퍼티를 작성할 시 컴파일 에러 발생.
let kimcoding: Commentary = {
id: 1,
content: "뭐예요?",
user: {
id: 1,
name: "김코딩",
email: "kimcoding@abcd.com",
isDeveloper: true,
},
};
타입 별칭으로 만들어진 타입을 참조할 시 인터페이스와 마찬가지로 내부에 정의된 프로퍼티들을 전부 참조해야 한다.
이 둘은 타입스크립트에서 거의 비슷하지만 조금 다른 특징들을 가지고 있다.
extends
로 확장 불가.extends
로 확장 가능.인터페이스는 기존의 인터페이스 및 타입 별칭으로 만들어진 타입 둘 다 상속 가능하기 때문에 extends
를 이용해 유연한 코드작성 가능.
변수나 함수의 타입을 선언하지 않아도 타입스크립트가 자동으로 유추하는 기능이다.
let isNumber = 123;
이 경우, 타입스크립트는 isNumber의 타입을 자동으로 숫자(Number)로 추론한다.
타입스크립트에서의 클래스는 JS의 클래스와 비슷하지만 몇가지 추가된 기능이 있다.
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet(): void {
console.log(`안녕하세요, 제 이름은 ${this.name}이고, ${this.age}살 입니다.`);
}
}