15 min/d

ぼうずやのにっき

DefinitelyTyped/tsd から typings/typings に移行した

bouzuya/typescript-boilerplateDefinitelyTyped/tsd から typings/typings に移行したことを書く。

typings/typings は TypeScript の型定義 (declaration source file) いわゆる .d.ts を取得するための CLI tool だ。同じ位置づけの DefinitelyTyped/tsd の後継である。

今回の目的は deprecated になってしまった DefinitelyTyped/tsd から typings/typings に乗り換えることだ。きっかけは npm install した際に tsd 0.6.5 が deprecated なったという通知を受けたことだ。もともと tsd は command-line option などが npm などと異なっており、ぼくには非直感的だったのですぐに乗り換えを決めた。

typings/typings の良いところはいくつかある。

ひとつは npm に近い command を持っていることだ。 typings init / typings search / typings install などを持っている。

$ $(npm bin)/typings init
$ cat typings.json                                                                                                                                                          {
 "dependencies": {},
 "devDependencies": {}
}

$ $(npm bin)/typings search mocha --ambient
Showing 4 results...

NAME            SOURCE HOMEPAGE                                   DESCRIPTION
gulp-mocha      dt     https://github.com/sindresorhus/gulp-mocha
mocha           dt     http://mochajs.org/
mocha-node      dt     http://mochajs.org/
mocha-phantomjs dt     http://metaskills.net/mocha-phantomjs/

$ $(npm bin)/typings install mocha --ambient --save-dev
? Found mocha typings for DefinitelyTyped. Continue? Yes
Installing mocha@~2.2.5 (DefinitelyTyped)...

mocha
└── (No dependencies)
$ cat typings.json                                                                                                                                                          {
  "dependencies": {},
  "devDependencies": {},
  "ambientDevDependencies": {
    "mocha": "github:DefinitelyTyped/DefinitelyTyped/mocha/mocha.d.ts#d6dd320291705694ba8e1a79497a908e9f5e6617"
  }
}

他の良いところは tsd の型定義を活かせることだ。上記の例にもある --ambient という option を指定する。この option は tsd の registry である DefinitelyTyped/DefinitelyTyped をあわせて検索したり install できる。

.d.ts を利用する側の移行方法が難しくないのも良い。npm install --save-dev typings して上記のように typings.json を作成して、 tsconfig.json に記述する d.ts を typings/tsd.d.ts から typings/main.d.ts に変えるくらいだ。

.d.ts を提供する側は registry が DefinitelyTyped/DefinitelyTyped から typings/registry に変わる。直接 .d.ts を管理するのではなく、 .d.ts を取得するための URL を管理する形だろう。version も管理できているので、より細かく管理できそうだ。

実際の使用例は [typescript-boilerplate][] に置いている。

特に見えている課題はない。tsd にできることはひととおりできるように思う。使うなかで見えてくるかもしれないけど。このあたりの移行方法は誰かが Qiita にでも書いていそう。

今後は新規の TypeScript Project では typings 一択だろう。