https://typescript-kr.github.io/pages/Interfaces.html

 

TypeScript 한글 문서

TypeScript 한글 번역 문서입니다

typescript-kr.github.io

알짜배기만 정리

 

  • readonly vs const
    • 변수는 const를 사용하는 반면 프로퍼티는 readonly를 사용합니다.

 

  • 인덱싱 가능 타입을 만들면?!
    • 인덱싱 종류는 두 가지이며 그중 하나만 이용하고 하위 호환되는 타입의 인덱스여야 한다!
class Animal {
  name: string;
}
class Dog extends Animal {
  breed: string;
}

// 오류: numeric과 string으로 인덱싱하면 완전히 다른 타입의 Animal을 얻을 수 있습니다!
interface NotOkay {
  [x: number]: Animal;
  [x: string]: Dog;
}

 

  • 올바른 생성자 시그니처 확인
    • 갸~꿀
interface ClockConstructor {
  new (hour: number, minute: number): ClockInterface;
}
interface ClockInterface {
  tick();
}

function createClock(
  ctor: ClockConstructor,
  hour: number,
  minute: number
): ClockInterface {
  return new ctor(hour, minute);
}

class DigitalClock implements ClockInterface {
  constructor(h: number, m: number) {}
  tick() {
    console.log("beep beep");
  }
}
class AnalogClock implements ClockInterface {
  constructor(h: number, m: number) {}
  tick() {
    console.log("tick tock");
  }
}

let digital = createClock(DigitalClock, 12, 17);
let analog = createClock(AnalogClock, 7, 32);
let analog2 = createClock(AnalogClock, 'a', 32);

 

  • 인터페이스 확장 클래스
    • 컴파일러 : 마! 접근 못 하는 곳은 어떻게 하라고?! 빼액
class Control {
  private state: any;
}

interface SelectableControl extends Control {
  select(): void;
}

class Button extends Control implements SelectableControl {
  select() {}
}

class TextBox extends Control {
  select() {}
}

// 오류: 'Image' 타입의 'state' 프로퍼티가 없습니다.
class Image implements SelectableControl {
  select() {}
}

class Location {}
블로그 이미지

_김은찬

두번 다시는 꺾이지 않으리

,