인터페이스(Interface)

·

1 min read

인터페이스(Interface)

인터페이스

인터페이스란 타입 별칭과 동일하게 타입에 이름을 지어주는 또 다른 문법으로 상속, 합침 등의 특수한 기능을 제공하기 때문에 객체의 구조를 정의하는데 특화되어 있다.

// 타입 별칭
type A = {
  a : string;
  b : number;
}

// 인터페이스
interface A {
  a : string;
  b : number;
}

선택적 프로퍼티


읽기 전용 프로퍼티


메서드 타입 정의하기

// 함수 표현식
interface Person {
  readonly name: string;
  hp?: number;
  sayHi: () => void;;
}

// 호출 시그니쳐
interface Person {
  readonly name: string;
  hp?: number;
  sayHi(): void;;
}


메서드 오버로딩

함수 타입 표현식으로 메서드의 타입을 정의하면 메서드의 오버로딩 구현이 불가능하다.

그러나 호출 시그니쳐를 이용해 메서드의 타입을 정의하면 오버로딩 구현이 가능하다.


하이브리드 타입

interface Func2 {
  (a: number): string;
  b: boolean;
}

const func: Func2 = (a) => "hello";
func.b = true;


주의할 점

인터페이스는 타입 별칭과 몇가지 차이점이 존재한다.

위와 같이 타입 별칭에서는 Union이나 Intersection 타입을 정의할 수 있지만, 인터페이스에서는 불가능하다.

따라서, 인터페이스로 만든 타입을 Union 또는 intersection으로 이용해야 한다면 다음과 같이 타입 별칭과 함께 사용하거나


혹은 아래와 같이 타입 주석에서 직접 사용해야 한다.