본문 바로가기

카테고리 없음

TypeScript - 인터페이스

인터페이스 ? 타입에 이름을 지어주는 또 다른 문법으로, 객체의 구조를 정의하는데 특화된 문법이다.( 상속, 합침 등 특수한 기능을 제공한다)

 

interface Person {
  name: string;
  age: number;
  // 메서드 오버로딩을 구현하고 싶다면 ? 아래와 같이 함수 호출 시그니쳐로 구현해야 한다.
  get_address(): string;
  get_address(city: string): string; // 호출 시그니쳐
}

// 인터페이스를 다른 타입과 Union 또는 Intersection 하려면, 아래와 같이 따로 타입을 지정해서 사용해야 한다.
type Type1 = number | string | Person;
type Type2 = number & string & Person;

const person: Person = {
  name: "jin",
  age: 2,
  get_address: function () {
    return "seoul";
  },
};

인터페이스 확장하기

interface Animal {
  name: string;
  age: number;
}

interface Dog {
  name: string;
  age: number;
  isBark: boolean;
}

interface Cat {
  name: string;
  age: number;
  isScratch: boolean;
}

interface Chicken {
  name: string;
  age: number;
  isFly: boolean;
}


--------------------------------

interface Animal {
  name: string;
  age: number;
}

interface Dog extends Animal {
  // name: "pipi"; // Animal의 원본 프로퍼티의 서브타입만 지정할 수 있다.
  isBark: boolean;
}

interface Cat extends Animal {
  isScratch: boolean;
}

interface Chicken extends Animal {
  isFly: boolean;
}

// Dog, Cat의 인터페이스 속성들을 상속받아 다중확장도 가능하다.
interface DogCat extends Dog, Cat {
  name: "";
  color: "";
  isBark: true;
  isScratch: true;
}

Java처럼 extends 키워드로 상속받아 인터페이스를 확장 할 수 있다.

 

인터페이스 선언 합치기

// 선언 합침
// 인터페이스는 같은 이름으로 중복 선언이 가능.
// 선언 합침 기능은 외부 라이브러리의 인터페이스 모듈보강 작업을 할 때 주로 사용
interface Person {
  name: string;
}

interface Person {
  age: number;
}

const person: Person = {
  name: "",
  age: 29,
};

인터페이스 합치기 기능에서 주의할점은 같은 이름의 프로퍼티를 선언할경우 프로퍼티 타입은 같아야 한다. 프로퍼티 이름이 같은데 타입이 다르면 에러 발생한다.