Islands in the byte stream

Technical notes by a software engineer

TypeScriptのDefinitelyTypedは「ダメでもともと、うまく使えればラッキー」くらいの距離感がよい

自前でTypeScript型定義ファイル(dts)を用意していないJSライブラリのための型定義ファイル集があります。

https://github.com/DefinitelyTyped/DefinitelyTyped

npmで @types/react みたいなのがそうです。

これは便利なものですが、ライブラリ作者ではない第三者が作っていることがほとんど(作者にやる気があればライブラリ本体で管理するほうが圧倒的によいので!)なので、型定義が間違ってることが普通にあります。

直近だと、 @types/react-intl の型定義が間違っているので、これを導入するとコンパイルが通らなくなるみたいな事情がありました。

一応PRは送りましたが、これがマージされても別に使う必要ないんじゃないかと思ってます。

というのも「第三者が型定義ファイルを作り気合で追従していく」という仕組み上、どうやってもTypeScriptで書いたライブラリと比較して型情報の精度は落ちるからです。DefinitelyTypedはあまり信頼できないものと割り切るしかありません。

そして、現在は TypeScript compilerの --allowJs フラグ(あるいは tsconfig.jsonallowJs option)によって *.js をimportできるようになっています。

おそらくもう少し時間がたつと の --allowJs が賢くなり、素のJSでもある程度型を推論してよしなにしてくれるようになると思われます。

つまり、

  • DefinitelyTypedは過渡期の技術であり、平均的な品質は低く、将来的には廃れると思われる
  • @types/* にこだわる必要はなく、便利そうなら使ってもいいが型定義なしでもまったく問題ない

くらいの気持ちで付き合うと気が楽でいいかなと思います。