인터페이스는 상호 간에 정의한 약속 혹은 규칙을 의미한다.
타입스크립트에서 인터페이스는 보통 다음과 같은 범주
interface personInfo {
age: number;
name: string;
job?: string; // optional
}
let person = {
name: "Sunki",
age: 31,
}
function logAge(obj: personInfo ) {
console.log(obj.name) // Sunki
console.log(obj.age); // 31
}
logAge(person); // 31
인자를 받을때 단순히 타입뿐만 아니라 객체의 속성 타입까지 명시가 가능하며, 항상 인터페이스의 속성 갯수와 인자로 받는 객체의 속성 갯수를 일치시키지 않아도 된다. 조건만 만족 한다면 객체의 속성 갯수가 더 많아도 상관이 없어, 확장또한 가능하다.
옵션 속성 (?) 같은 경우는 속성을 선택적으로 적용 하면서 인터페이스에 정의 되어 있지 않은 속성에 대해서 인지가 가능하다.
// 읽기 전용 속성
interface CraftBeer {
readonly brand: string
}
let myBeer: CraftBeer = {
brand: 'asahi'
};
myBeer.brand = 'cass'; // Cannot assign to 'brand' because it is a read-only property.
읽기 전용 속성으로 객체에 처음 생성할 때만 값을 할당하고 그 이후에는 변경할 수 없는 속성을 가질 수도 있다.
// 함수 타입
interface login {
(username: string, password: string) : boolean;
}
let loginUser: login;
loginUser = function (id:string, pw:string) {
console.log('로그인 했습니다')
return true;
}