타입스크립트의 타입 계층도에서 object 타입은 인터페이스와 클래스의 상위 타입이다.
let o : object = {name : "kangmin", age : 23}
o = {first : 2 , second : 3}
위와 같이 작성을 하면 객체의 value들은 타입이 정해지지 않아 어떤 타입으로와도 되며 심지어 key가 변경될 수 있다.
이렇게 동작하지 않도록 고안이 된 것이 인터페이스이다.
interface 인터페이스 이름 {
속성 이름[?] : 속성타입
}
interface IPerson {
name : string
age : number
// 선택 속성 구문
// 아래와 같이 ?을 사용하면 선택 하여 사용 할 수 있다.
etc ?: boolean
}
// ? 을 사용한 변수는 적지 않아도 문제가 없다.
let o:IPerson = {name : "jack", age : 213}
// key가 동일한지와 값의 타입은 동일한지 확인하고 다르면
// 타입체크에서 에러를 발생시킨다.
o = {name : "kkk", age : 2, etc : true}
//console.log(o);
interface 키워드를 사용하지 않고 인터페이스의 이름도 없는 인터페이스를 만들 수 있다.
이를 익명 인터페이스라고 하며 보통 함수를 구현 할 때 사용한다.
let ai : {
name : string
age : number
etc ?: boolean
} = {name : "jack", age : 23}
// 위와 같이 선언한 익명 인터페이스는 아래와 같이 함수에서 많이
// 사용된다.
// 함수에서 익명인터페이스를 사용하기 위해서는 매개변수도 인터페이스처럼 만들어야 한다.
function print(me : {name : string, age : number, etc ?: boolean}){
console.log(`${me.name}은 ${me.age}입니다.`)
}
print(ai) //jack은 23입니다.