타입스크립트 인터페이스, 제네릭

Heechang Jeong·2023년 5월 31일
0

Typescript

목록 보기
7/7

인터페이스

타입 별칭과 동일하게 타입에 이름을 지어주는 또 다른 문법


  • 네이밍 컨벤션(Naming Convention)

    이름을 짓는 일종의 관례.
    TypeScript로 개발할 때 대부분의 개발자는 인터페이스의 이름을 대문자로 시작하도록 작성한다. 인터페이스는 객체의 타입을 정의하고, 객체가 대문자로 시작하는 것과 유사하기 때문에 일관성 있는 코드 작성을 위해 이러한 관례를 따르는 것이다.

  • 메서드 오버로딩

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

    interface Person {
     readonly name: string;
     age?: number;
     sayHi: () => void; 
     sayHi: (a: number, b: number) => void; // ❌
    }

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

    interface Person {
     readonly name: string;
     age?: number;
     sayHi(): void;
     sayHi(a: number): void;
     sayHi(a: number, b: number): void;
    }

  • 주의할 점

    인터페이스로 만든 타입을 Union 또는 Intersection으로 이용해야 한다면 타입 별칭과 함께 사용하거나 타입 주석에서 직접 사용해야 한다.

    type Type1 = number | string | Person;
    type Type2 = number & string & Person;
    const person: Person & string = {
     name: "이정환",
     age: 27,
    };


제네릭

코드 재사용성을 높이고 타입 안정성을 보장하는 기능

함수나 클래스를 작성할 때, 사용될 데이터의 타입을 미리 지정하지 않고, 이후에 함수나 클래스를 호출할 때 인자로 전달된 데이터의 타입에 따라 자동으로 타입을 추론한다.

function printLog<T>(text: T): T {
	return text;
}
  • 인터페이스와 제네릭

interface KeyPair<K, V> {
  key: K;
  value: V;
}
let keyPair: KeyPair<string, number> = {
  key: "key",
  value: 0,
};

let keyPair2: KeyPair<boolean, string[]> = {
  key: true,
  value: ["1"],
};


0개의 댓글