string
타입이 아니라 MyName
이라는 유의미한 타입명 부여// 타입 별칭 MyName 에 string 타입을 할당한 후
type MyName = string;
// 단순 string이 아닌 'MyName'으로 capt 변수에 타입 부여
var capt: MyName = '캡틴';
string | number
라는 타입을 타입 별칭으로 '변수화'function logText(text: string | number) { }
var message: string | number = '안녕하세요';
logText(message);
type MyMessage = string | number;
function logText(text: MyMessage) { }
var message: MyMessage = '안녕하세요';
logText(message);
🙋♀️ 주의
타입 별칭은 동일명에 새로운 값을 부여하는 재할당(선언 병합)은 안 됨type MyName = string; type MyName = number; // 에러 발생
type ID = string; // 원시 타입
type Product = TShirt | Shoes; // 유니언 타입
type Teacher = Person & Adult; // 인터섹션 타입
type Gilbut<T> = { // 제네릭 타입
book: T;
}
type MyBeer = Pick<Beer, 'brand'>; // 유틸리티 타입
이미 정의되어 있는 타입들을 조합해서 더 큰 타입 생성
extends
키워드를 사용한 상속 사용interface Person {
name: string;
age: number;
}
interface Developer extends Person { // 상속
skill: string;
}
&
을 사용한 여러 타입 결합type Person = {
name: string;
age: number;
}
type Developer = {
skill: string;
}
type Joo = Person & Developer
🙋♀️ 인터페이스: 선언 병합
인터페이스를 동일한 이름으로 재선언 시 자동으로 합쳐짐// 동일한 Person이라는 이름으로 여러 개 선언 interface Person { name: string; age: number; } interface Person { address: string; } // 두 인터페이스의 속성 모두 사용 가능 var seho: Person = { name: '세호', age: 30, address: '광교' }
🙋♀️ 인터페이스와 타입 별칭을 혼합해서 사용 가능
interface Person { name: string; age: number; } type Adult = { old: boolean; } type Teacher = Person & Adult; // 인터섹션
// 맵드 타입
type Picker<T, K extends keyof T> = {
[P in K]: T[P]
};
// 타입 별칭으로 정의한 경우
type User = {
id: string;
name: string;
}
// 인터페이스로 정의한 경우
interface User {
id: string;
name: string;
}
// API 통신 함수에서 사용한 모습
function fetchData(): User {
return axios.get('http://localhost:3000/users/1');
}
interface Admin {
role: string;
department: string;
}
interface User extends Admin {
id: string;
name: string;
}
interface User {
skill: string;
}
// 결과
interface User {
id: string;
name: string;
role: string;
department: strint;
skill: string;
}