이펙티브 타입스크립트 (댄 밴더캄 지음) 를 읽고 정리
📍요약
✅타입과 인터페이스는 대개 공통적이지만, 차이점도 있다
📍타입 확장 : 둘 다 가능
type TState = {
name: string;
capital: string;
}
interface IState {
name: string;
capital: string;
}
// 인터페이스는 타입 확장 가능
interface IStateWithPop extends TState {
population: number;
}
// 타입도 인터페이스 확장 가능
type TStateWithPop = IState & { population: number; };
IStateWithPop 과 TStateWithPop 는 동일
📍Class implements : 둘 다 가능
class StateT implements TState {
name: string = "";
capital: string = "";
}
class StateI implements IState {
name: string = "";
capital: string = "";
}
📍Union 타입의 결과물은 type에만 할당 가능
interface A {
number: string;
}
interface B {
age: number;
}
// interface에 = 사용 불가
type C = A | B
- 대입 연산자가 필요한 곳에 interface를 쓸 수 없다
📍 타입 보강(augment)은 인터페이스만 사용 가능
interface IState {
name: string;
capital: string;
}
interface IState {
population: number;
}
const wyoming: IState = {
name: "Wyoming",
capital: "Cheyenne",
population: 500000
}
이러한 프로퍼티 확장을 선언 병합이라고 한다
- 선언 병합은 타입스크립트 표준 라이브러리 타입 등에 사용된다
- 예) lib.es5.d.ts 와 lib.es2015.d.ts 등의 병합