TYPESCRIPT

[Typescript] 인터페이스(interface)[2]

seominki 2024. 7. 12. 09:55

인터페이스 상속

인터페이스 상속으로 인한 타입 정의를 확장하는 방법.

javascript 에서 클래스로도 상속을 구현할 수 있다

// Class
Class Person {
      constructor(name, age) {
        this.name = name;
        this.age = age;
    }

      logAge() {
        console.log(age);
    }
}

Class Developer extends Person {
    constructor(name, age, skill) {
        super(name, age);
          this.skill = skill;
    }

      logDeveloperInfo() {
        this.logAge();
        console.log(this.name);
        console.log(this.skill);
    }
}

const minki = new Developer("민기", 29, "js");
minki.logDeveloperInfo();

// interface
interface Person {
    name: string;
    age: number;
}

interface DeveloperInfo extends Person {
    skill: string;
}

const tom: DeveloperInfo = {
    name: "톰",
    age: 20,
    skill: "거미줄 타기"
}

인터페이스를 이용한 인덱싱 타입 정의

인터페이스로 객체와 배열의 인덱싱 타입을 정의하는 방법

배열의 인덱스는 숫자로 접근 할 수 있기 때문에 아래와 같이 사용한다.

interface StringArray {
  // [index: number] = 어떤 숫자든 속성의 이름이 될 수 있음
    [index: number]: string;
}

const companies: StringArray = ["네이버", "카카오", "토스"];

console.log(companies[0]); // "네이버"

객체의 인덱싱 타입 정의

interface SalaryMap {
    [level: string]: string;
}

const salary: SalaryMap = {
  junior: "2000원"
}

인덱스 시그니처

정확한 속성 이름을 명시하지 않고 속성 이름의 타입과 속성 값의 타입을 정의하는 문법을 인덱스 시그니처(index signature)라고 합니다.
단순히 객체와 배열을 인덱싱할 때 활용될 뿐 아니라 객체의 속성 타입을 유연하게 정의할 때도 사용된다.

interface User {
  	id: string;
  	name: string;
  	[property: string]: string
}