인터페이스 ? 타입에 이름을 지어주는 또 다른 문법으로, 객체의 구조를 정의하는데 특화된 문법이다.( 상속, 합침 등 특수한 기능을 제공한다)
interface Person {
name: string;
age: number;
// 메서드 오버로딩을 구현하고 싶다면 ? 아래와 같이 함수 호출 시그니쳐로 구현해야 한다.
get_address(): string;
get_address(city: string): string; // 호출 시그니쳐
}
// 인터페이스를 다른 타입과 Union 또는 Intersection 하려면, 아래와 같이 따로 타입을 지정해서 사용해야 한다.
type Type1 = number | string | Person;
type Type2 = number & string & Person;
const person: Person = {
name: "jin",
age: 2,
get_address: function () {
return "seoul";
},
};
인터페이스 확장하기
interface Animal {
name: string;
age: number;
}
interface Dog {
name: string;
age: number;
isBark: boolean;
}
interface Cat {
name: string;
age: number;
isScratch: boolean;
}
interface Chicken {
name: string;
age: number;
isFly: boolean;
}
--------------------------------
interface Animal {
name: string;
age: number;
}
interface Dog extends Animal {
// name: "pipi"; // Animal의 원본 프로퍼티의 서브타입만 지정할 수 있다.
isBark: boolean;
}
interface Cat extends Animal {
isScratch: boolean;
}
interface Chicken extends Animal {
isFly: boolean;
}
// Dog, Cat의 인터페이스 속성들을 상속받아 다중확장도 가능하다.
interface DogCat extends Dog, Cat {
name: "";
color: "";
isBark: true;
isScratch: true;
}
Java처럼 extends 키워드로 상속받아 인터페이스를 확장 할 수 있다.
인터페이스 선언 합치기
// 선언 합침
// 인터페이스는 같은 이름으로 중복 선언이 가능.
// 선언 합침 기능은 외부 라이브러리의 인터페이스 모듈보강 작업을 할 때 주로 사용
interface Person {
name: string;
}
interface Person {
age: number;
}
const person: Person = {
name: "",
age: 29,
};
인터페이스 합치기 기능에서 주의할점은 같은 이름의 프로퍼티를 선언할경우 프로퍼티 타입은 같아야 한다. 프로퍼티 이름이 같은데 타입이 다르면 에러 발생한다.