*// [ Type ]*
type PositionType = {
  x: number;
  y: number;
}

*// [ Interface ]*
interface PositionInterface {
  x: number;
  y: number;
}

*// object ★*
const obj1: PositionType = {
  x: 1,
  y: 1,
}
const obj2: PositionInterface = {
  x: 1,
  y: 1,
}

*// class ★*
class Pos1 implements PositionType {
  x: number;
  y: number;
}

class Pos2 implements PositionInterface {
  x: number;
  y: number;
}

*// Extends*
interface ZPositionInterface extends PositionInterface {
  z: number;
}

type ZPositionType = PositionType & { z: number };

*// ---------------------*

*// Interface만 가능한 것*
*// only interfaces can be merged.*
*// type 에서는 중복되는 타입이라고 에러가 뜬다.*
{
  interface PositionInterface { *// Interface 이름 동일*
    x: number;
    y: number;
  }

  interface PositionInterface { *// Interface 이름 동일*
    z: number;
  }

  const obj: PositionInterface = {
    x: 1,
    y: 1,
    z: 1,
  }
	// property 가 오버라이딩 된다.
}

Type 과 Interface 는 선언되는 방식이 비슷하다. 그러나 사용하는 목적은 다르므로 Type 과 Interface 의 정의와 개념을 잘 이해하고 있는 것이 중요하다.