typealias
1. 인터페이스와 비슷하지만 우리가 직접 작성한 타입에 이름을 붙일 수 있다.
interface User {
name: string;
}
interface Action {
do(): void
}
type UserAction = User & Action;
function createUserAction () : UserAction {
return do() {
do() {},
name: ''
}
}
type StringOrNumber = string | number;
2. 타입별칭은 Generic도 사용가능하다
type Arr<T> = T[];
// 제너릭을 이용해서 Arr이라는 타입은 타입파라미터 T를 받아서 T에 해당하는 배열의 타입을 가르키게 된다.
type P<T> = Promise<T>;
//기존에 만들었던 타입들을 유니온이나 intersection타입이나 다양한 타입들로 구성한 것들에 이름을 부여할 수 도 있고,원시형 타입도 가능하고 기존에 있는 타입을 이름만 바꾸거나 단축시켜서 표현할 수 있다.
3. 이름뿐만 아니라 interface처럼 심지어 특정 타입을 정의할 수도 있다.
type User2 = {
name: string;
login(): boolean;
}
class UserImpl implements User2 {
name: string;
login(): boolean {
throw new Error("Method not implemented.");
}
}
//interface가 아님에도 불구하고 implements가 가능하다.
4.문자열리터럴 타입과 같이 활용하게 되면 유용하게 사용할 수 있다.
type User2 = {
name: string;
login(): boolean;
}
class UserImpl implements User2 {
name: string;
login(): boolean {
throw new Error("Method not implemented.");
}
}
type UserState = "PENDING" | "APPROVED" | "REJECTED";
//상태에 대한 문자열들에 대해서 유니온타입으로 가져간다.
function checkUser(user: User2): UserState {
if(user.login()) {
return "APPROVED";
} else {
return "REJECTED";
}
}
//예를 들면 유저를 검사를 하는데 유저를 검사하면서 나온 상태를 반환해야 한다면 유저의 상태중 하나가 리턴되게 할 수 있다.