Help us understand the problem. What is going on with this article?

npmでTypeScriptの型定義を管理できるtypesパッケージについて

More than 3 years have passed since last update.

どうも、らこです。

Angular 2の開発リポジトリでは型定義ファイルの依存解決に関して、最初はtsdだったのが途中でtypingsに移り、そして最近またtsdに回帰していたのですが、ついにtsdすらも使わず、npmだけですべてを解決するようになってました。

いったいどうやって?というのが今回のお話で、結論から言うと @types スコープから公開されているパッケージがdevDependenciesとして依存されるようになっていました。

@types

https://www.npmjs.com/~types

typesという名前のユーザーで、明らかにbotだけど中身はMicrosoftの人らしい。(メールアドレスから)
どのパッケージもだいたい 2016/5/17 に最初のpublishがされているらしく、最近始まった取り組みのようです。

現在1700超のパッケージが公開されてますが、すべて型定義ファイルのパッケージです。型定義は https://github.com/DefinitelyTyped/DefinitelyTyped と自動で同期されているらしく、 DefinitelyTypedの1ライブラリが、typesの1パッケージに対応している感じです。
例えばAngularJSの型定義ファイルが欲しければ次のようにインストールします

$ npm install -D @types/angularjs

当然ながら、使うときはnode_modulesの中からd.tsファイルを読み込みます。
すべてのパッケージをチェックしたわけではないですが、基本的には index.d.ts がエントリポイントになっているようです。

/// <reference path="../node_modules/@types/angularjs/index.d.ts" />

所感

tsdしかり、 dtsmしかり、typingsしかり、DefinitelyTypedから型定義ファイルをダウンロードするツールは、どのライブラリの型定義を得ようとしてもあの巨大なリポジトリを一度pullして、その中から一部を取り出すということが必要で、長いインストール時間にイライラしたことは皆さんあると思います。
typesの型定義パッケージを使うと個別になっているので自分が依存した分だけのダウンロードが行われて、いろいろと幸せそうです。
npmの仕組みに乗れるのでバージョン管理も楽ですし、コンフィグファイルの読み方を覚え直す必要もありません。

この取り組みが本当に公式にしっかりサポートされていくものなのか、ある種の実証実験でまだ乗っからないほうがいいのかわからないのですが、もしMicrosoftやTypeScriptの内部事情に詳しい人がいて知っていたら教えてほしいです。

lacolaco
I play Angular and pray for Angular. No Breaking Changes No Life.
https://lacolaco.net
classi
学校の先生・生徒・保護者向けのB2B2Cの学習支援Webサービス「Classi(クラッシー)」 を開発・運営している会社です。
https://classi.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away