타입 별칭을 이용하면 다음과 같이 변수를 선언하듯 타입을 별도로 정의할 수 있음
// 타입 별칭
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
};
...
→ type 타입_이름 = 타입 형태로 타입을 정의함.
→ 위 코드는 타입 이름으로는 User 그리고 타입으로는 여러 개의 프로퍼티가 있는 개체 타입을 정의함
이렇게 만든 타입 별칭은 다음과 같이 변수의 타입을 정의할 때 타입 주석과 함께 이용할 수 있음
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
};
let user: User = {
id: 1,
name: ""문동민",
nickname: "moon",
birth: "2000.10.08",
bio: "안녕하세요",
location: "대전광역시",
};
let user2: User = {
id: 2,
name: "홍길동",
nickname: "winterlood",
birth: "1997.01.07",
bio: "안녕하세요",
location: "부천시",
};
참고로 동일한 스코프에 동일한 이름의 타입 별칭을 선언하는 것은 불가능함. 마치 변수 선언과 유사함
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
};
type User = {} // error
하지만 스코프가 다르면 다음과 같이 중복된 이름으로 여러개의 별칭을 선언해도 상관 없음
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
};
function test() {
type User = string;
}
→ test 함수 내부에서는 User가 string 타입 / test 함수 바깥에서는 User가 객체 타입이 됨
인덱스 시그니처는 객체 타입을 유연하게 정의할 수 있도록 돕는 특수한 문법