객체 타입을 만드는 또 다른 방법
클래스와 비슷하지만, 클래스와 달리 정의만 할 뿐 실제 구현되지 않는다.
interface에 있는 key 값이 필수적으로 들어가야 하며, value 값의 타입이 무조건 같아야 한다.
interface User {
name: string;
age: number;
isValid: boolean;
}
// 위에서 정해준 인터페이스를 사용한다.
const heropy: User = {
name: 'Heropy',
age: 85,
isValid: true,
};
// isValid를 넣지 않아서 에러가 발생
const neo: User = {
name: 'Neo',
age: 102,
};
선택적으로 속성을 사용할건지 말건지를 정해줄 수 있다.
interface Abc {
name: string;
age: number;
isValid?: boolean;
}
// ?기호가 없으면 존재하지 않아도 된다.
const neo2: Abc = {
name: 'Neo',
age: 102,
};
읽기 전용으로 속성을 걸어 줄 경우, 한번 지정한 value 값을 변경 할 수 없게 된다.
(원시 타입의 const와 같은 개념)
interface Abc2 {
name: string;
readonly age: number;
isValid?: boolean;
}
const neo3: Abc2 = {
name: 'Neo',
age: 102,
};
neo3.name = 'gasd';
neo3.age = 123; // 읽기만 가능하기에 에러 발생