
객체 구조를 정의하는데 특화된 문법, 타입과 다르게 상속,합침(머지) 가 가능함.
interface Person {
name:string;
age:number;
sayHi : () => void // 메서드 정의
sayHi() : void // 호출 시그니처
sayHi(a:number,b:number) : void;// 호출 시그니처
}
const person : Person = {
name:"김민석"
age:27
}
함수 표현식 정의는 두번 정의가 안되서 위에 sayHi 처럼 호출 시그니처를 이용해 오버로딩 구현하는 경우에는 함수 표현식 정의보다 호출 시그니처를 이용해 사용해야 한다. 보통은 함수 표현식 정의를 이용함.
슈퍼타입의 프로퍼티를 서브타입들이 상속 받아 사용하는 것
interface Animal{
name:string;
color:sring;
}
interface Dog extends Animal{
isBark : boolean
}
extends 를 이용해 슈퍼 타입의 프로퍼티를 상속 받을 수 있음.
상속 받은 프로퍼니는 재 정의 가능하지만 다운캐스팅(원본의 서브타입) 가능한 것 만 가능하다. string 에서 number 처럼 다르게 재 정의는 불가능하다.
interface DogCat extends Dog,cat {
}
인터페이스는 타입과 달리 중복으로 같은 이름을 사용해도 오류가 나지않음. 그 대신에 중복된 이름으로 인터페이스를 선언하면 두개의 인터페이스는 합쳐진다(머지) 두개의 프로퍼티를 모두 가지게된다. 선언 합침에 대해서는 똑같은 프로퍼티에서는 같은 타입을 사용해야 한다.
interface Person {
name:string;
age:number;
}
interface Person {
age:string; // x age가 number 와 string 둘다 있으면 안됨.
name : "kms" // x 서브타입에도 오류가 남 string으로 해야함.
}
또한 합치는 경우에는 서브타입 으로 정의를 해도 오류가 난다!..