1. interface의 역할과 class의 역할


interface

・변수에 interface 형태의 타입을 선언할 수 있다.

・new로 인스턴스 생성이 불가능하다 → 주로 프로퍼티나 함수의 형태를 다른 인터페이스나 클래스에서 사용할때 주로 사용된다.

・인터페이스를 임플러먼트한 대상은 해당 인터페이스에 있는 프로퍼티 및 메소드를 반드시 전부 가지거나 구현해야 한다.


②class

・변수에 class 형태의 타입을 선언할 수 있다.

・new로 인스턴스를 생성 가능하다.




2. interface와 class의 상속관계 증명

interface


interface implements interface (X)

interface extends interface (O)

interface implements class (X)

interface extends class (O)



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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
interface PersonI {
    name: string;
    age?: number;
}
 
class PersonC{
    name: string;
    age?: number;
}
 
 
// interface implements interface (X)
// Interface declaration cannot have 'implements' clause
interface Korean1 implements PersonI {
    city: string;
}
 
// interface extends interface (O)
interface Korean2 extends PersonI {
    city: string;
}
 
// interface implements class (X)
// Interface declaration cannot have 'implements' clause
interface Korean3 implements PersonC {
    city: string;
}
 
// interface extends class (O)
interface Korean4 extends PersonC {
    city: string;
}
 
const kim: Korean2 = {
    city: 'seoul',
    name'cheolsu'
}
 
const lee: Korean4 = {
    city: 'seoul',
    name'cheolsu'
}
cs




②class


class implements interface (O)

class extends interface (X)

class implements class (O)

class extends class (O)



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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
interface PersonI {
    name: string;
    age?: number;
}
 
class PersonC{
    name: string;
    age?: number;
}
 
 
// class implements interface (O)
// implemnts된 name은 반드시 정의 되어야 한다.
class Korean1 implements PersonI {
    name: string;
    city: string;
}
 
// class extends interface (X)
// Cannot extend an interface 'PersonI'. Did you mean 'implements'?
class Korean2 extends PersonI {
    city: string;
}
 
// class implements class (O)
// implemnts된 name은 반드시 정의 되어야 한다.
class Korean3 implements PersonC {
    name: string;
    city: string;
}
 
// class extends class (O)
class Korean4 extends PersonC {
    city: string;
}
 
 
const kim: Korean1 = {
    name'cheolsu',
    city: 'seoul'
}
 
const choi: Korean3 = {
    name'sooyoung',
    city: 'busan'
}
 
const lee: Korean4 = {
    name'cheolsu',
    city: 'seoul'
}
cs

















'frameworks > typescript' 카테고리의 다른 글

TypeScript 핸드북 1 - 기본 타입  (0) 2019.04.24
tsconfig 컴파일 옵션 정리  (0) 2019.04.05
[typescript]decorator  (0) 2018.12.11
[typescript]iterator  (0) 2018.12.11
[typescript]generic(+additional:string literal type)  (0) 2018.12.07

+ Recent posts