Posted at

DefinitelyTyped(@types)の型定義を削除するプルリクエストの出し方


やりたいこと

TypeScriptで開発している方は、@types/oooになってるパッケージお世話になっていると思います。この記事では、DefinitelyTypedにある不要になった型定義を削除する方法に関して紹介します。

こういう話は、日本語とかだとあんまり説明ない気がするのと、公式のドキュメントよりは少し抽象的なので、具体的にどんなコマンドを打てばいいかを書くことがこの記事の一番の目的です。


型定義を削除する経緯

get-portというパッケージがあります。get-port@4.2.0で公式で型定義が用意さました。それに伴って@types/get-portを削除することになりました。

公式のREADME.mdのRemoving packageにどうやって削除したらよいか書いてあります。それを頼りに削除して、それをコミットしました。そのリンクの説明に具体例がなかったので、それを書くことがこの記事の目的です。


型定義の削除方法

以下のように、削除はコマンドを一つ打つだけの親切な設計になっています。ただ、具体的な例がなかったので、この記事ではそれを書きたいです。

npm run not-needed -- typingsPackageName asOfVersion sourceRepoURL [libraryName]

以下が、実際に打ったコマンドです。

npm run not-needed -- get-port 4.2.0 https://github.com/sindresorhus/get-port

実際のコミットです。

notNeededPackages.jsonget-portが加わり、DefinitelyTyped/types/get-portが削除されていることが分かります。

あとは、変更したものをforkしたリポジトリにpushして、プルリクエストを出せばOKです。

今回の@types/get-portの削除プルリクエスト: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/34165

無事にマージされました


--以降の引数に関しての説明



  • get-portの部分はDefinitelyTyped/types/get-portだから、get-portになるはずです。


  • 4.2.0get-portでのバージョンです。


    • 公式のREADME.mdによると、@types/get-portで公開されているものより高いバージョンを指定する必要があるらしいです。

    • そしてこのバージョンはnpm上のget-portで公開されているバージョンでなければならないようです。




  • https://github.com/sindresorhus/get-portは型定義があるリポジトリのURL

  • その次にも引数を指定できて、DefinitelyTypedを置き換える型定義のnpmパッケージの名前を書くぽいです


    • 大体の場合、最初の引数(今回の場合get-port)と同じだから省略できます



TravisCI上で、CIが通ったURL: https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/510980452

(CIうまく通らないときに、実行結果を比較すると参考になるかも知れません)


最初、勘違いしたところ

4.2.0のバージョンは@types/get-portより高いバージョンを指定してね」と書いてあるだけだったので、現在の@types/get-port4.0.1なので、4.0.2にした。ただこの解釈は間違いでした。

CIで出たエラーはこちらです。https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/510977291

エラーを見ると「The specified version 4.0.2 of get-port is not on npm.」となっていて、「4.0.2は存在してないnpmパッケージだよ」といっています。

これを頼りに、get-port公式で で型定義が対応した4.2.0を指定してCIも通りました。


PRの具体的な経緯

実は最初はあのPRは削除する用のPRじゃなかったです。それを書くとごちゃごちゃすると思って触れていません。

もし、詳細知りたいよって方は、Qiita投稿前に書いていた:https://scrapbox.io/nwtgck/DefinitelyTyped(@types)%E3%81%AE%E5%9E%8B%E5%AE%9A%E7%BE%A9%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8BPR%E3%82%92%E5%87%BA%E3%81%99%E3%81%A8%E3%81%8Dに書いてあります。