0%

타입 엘리어스(타입별칭)

타입 엘리어스는 새로운 타입을 정의한다. 타입으로 사용할 수 다는 점에서 타입 엘리어스는 인터페이스와 유사하다. 인터페이스는 다음과 같이 타입으로 사용할 수 있다.

1
2
3
4
5
6
7
8
9
interface Person{
name:string;
age?:number;
}
//빈객체를 Person타입으로 지정
const person = {} as Person;
person.name = 'kim';
person.age = 20;
person.address = 'Seoul' //Error;

타입 엘리어스도 인터페이스와 마찬가지로 타입으로 사용할 수있다.

1
2
3
4
5
6
7
8
9
10
//타입 엘리어스
type Person{
name:string,
age?:number
};
//빈 객체를 Person타입으로 지정
const person = {} as Person;
person.name = 'kim';
person.age = 20;
person.address = 'Seoul' //Error;

하지만 타입 엘리어스는 원시값, 유니온 타입 ,튜플 등도 타입으로 지정 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//문자열 리터럴로 타입 지정
type Str = 'kim';

//유니온 타입으로 타입 지정
type Union = string | null;

//문자열 유니온 타입으로 타입 지정
typ Name = 'kim'| 'lee';

//숫자 리터럴로 유니온 타입으로 타입 지정
type Num = 1| 2 | 3 | 4 | 5;

//객체 리터럴 유니온 타닙으로 타입 지정
typs Obj = {a:1} | {b:2};

//함수 유니온 타입으로 타입지정
type Fuc = (()=>string) | (()=> void);


//인터페이스 유니온 타입으로 타입 지정
type Shape = Square | Rectangle | Circle;

//튜플로 타입지정
type Tuple = [string ,boolean];
const t:Tuple = ['',1]
const f:Tuple = ['',''] //Error 지정한 타입만 가능하다.

인터페이스는 extends 또는 implements 될 수 있지만 타입 엘리어스는 extends , implements 될 수 없다. 즉 상속을 통해 확장이 필요하다면 타입 엘리어스보다는 인터페이스가 유리하다. 하지만 인터 페이스로 표현 할 수없거나 유니온 타입 또는튜플을 사용해야한다면 타입 엘리어스를 사용하는 것이 유리하다.

그러나 현시점에서는 type도 extends , implements 모두 사용 가능하도록 변경 되었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
type test = {
a:number;
}
interface inter extends test{ //ok
b:number;
}
class Test implements inter{// ok
public a = 1;
public b = 1;
}
class Test2 implements test{ //ok
public a = 1;
}