Ambient Modules

Modules Typescript

Node.js로 작업할 때, 대부분의 테스크들은 하나 이상의 모듈을 불러오는 것으로 이뤄진다. 이 상황에서 module 키워드를 사용하면, 향후 import를 수행할 때 지정된 모듈의 명칭을 사용할 수 있다.

// node.d.ts
declare module 'url' {
  export interface Url {
    protocol?: string;
    hostname?: string;
    pathname?: string;
  }

  export function parse(
    urlStr: string,
    parseQueryString?,
    slashesDenoteHost?
  ): Url;
}

declare module 'path' {
  export function normalize(p: string): string;
  export function join(...paths: any[]): string;
  export var sep: string;
}

declare class vs interface

Typescript declaration files contain class definitions with no member implementations

개인적으로 생각하는 타입스크립트의 단점 중 하나는 과도하게 많은 옵션을 제공한다는 것인데, 사실 이 항목도 거기에 해당하는게 아닐까 싶다. .d.ts 파일은 기존에 존재하는 Javascript 혹은 Typescript의 class 구현체의 타입을 정의하기 위해 사용된다. declare class는 이 파일에서 사용되는데, 기본적으로 “다른 어딘가에 이 모양을 한 클래스가 있을 것이다”로 해석될 수 있다 반대로 interface의 경우 정말 해당 객체의 모양을 잡을 때 사용된다고 생각하면 될듯하다.

이와 다르게, 정말 사용자 입장에서 살펴보자면, interfacedeclare class의 가장 큰 차이는 new 키워드라고 할 수 있다. interface에는 new 키워드를 사용할 수 없다.