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 |