Interface

객체 타입을 만드는 또 다른 방법

클래스와 비슷하지만, 클래스와 달리 정의만 할 뿐 실제 구현되지 않는다.

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,
};

읽기 전용 속성 - readonly

읽기 전용으로 속성을 걸어 줄 경우, 한번 지정한 value 값을 변경 할 수 없게 된다.

(원시 타입의 const와 같은 개념)

interface Abc2 {
  name: string;
  readonly age: number;
  isValid?: boolean;
}

const neo3: Abc2 = {
  name: 'Neo',
  age: 102,
};

neo3.name = 'gasd';
neo3.age = 123; // 읽기만 가능하기에 에러 발생