2021年10月12日火曜日

今後あらゆるJavaScriptは全てTypeScriptを使って書くべきでしょうか?

https://jp.quora.com/%E4%BB%8A%E5%BE%8C%E3%81%82%E3%82%89%E3%82%86%E3%82%8BJavaScript%E3%81%AF%E5%85%A8%E3%81%A6TypeScript%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E6%9B%B8%E3%81%8F%E3%81%B9%E3%81%8D%E3%81%A7%E3%81%97%E3%82%87%E3%81%86

シェアしました。


そうでもないと思います。

すいません、こだわりがある領域の話題で、かつ、多くの人が正しいとは思えない選択をしていると思っているので長文になります。乱文失礼します。

私はJavaScriptには詳しい方ですが、TypeScriptはいまのところ特に使おうと思っていません。

TypeScriptが多くのJSエンジニアに人気でそのメリットもかなりわかっていますし、それで幸せになる方も多いから使われているのですが、わたしはいくつかの気になる点があるためにTypeScriptを採用していません。

ちょっと過激なタイトルでインパクトを狙って、以前、下記の記事を書きました。

TypeScript不要論:型チェックは TypeScript や Flow じゃなくて JavaScript にやらせる。 - Qiita

TypeScriptの最大のメリットである静的な型チェックは、JavaScriptだけでも関数ごとに実行時型チェックをすることで同じことができることを示している記事です。

防御的プログラミングとか契約プログラミングと呼ばれるテクニックです。動的型言語を使いこなしている人なら、たぶん自然にこの程度のことはできてしまうでしょうし、そういう組み方をすることができる熟練者ならばTypeScriptと同程度にJavaScriptでも不具合を減らすことができるので、TypeScriptのメリットはほとんど消失し

… (もっと読む)
石塚 正浩さんのプロフィール写真

1000行くらいまでなら Javascript で十分かもしれません。

もう少し大規模になってくると TypeScript の強みが出てきます。

また、 npm モジュールを提供する立場であれば是非とも TypeScript で書いて欲しいですね。使う側からすると、 TypeScript の自動補完を効かせた状態でライブラリ使うのはめちゃくちゃ便利です。

TypeScript なしでも型チェックが出来るっていう主張があるみたいですが、実行時型チェックとコンパイル時型チェックは目的が違いますので、一方で他方が不要になるということはないです。

石塚 正浩さんのプロフィール写真

JSコードの開発が、「ビルド」という過程を踏むのであれば、多くの場合でTypeScriptを使うことに躊躇する必要はないと思っています。ビルドを踏まない素のJSコードを書かなければならないケースとは、たとえば

  • AWS Lambdaをマネージメントコンソールで直接書く場合
  • Google App ScriptにJSコードを書く場合

などであり、TypeScriptを使うわけにはいきませんよね。

とはいえ、そうではないとしても「あらゆる」「全て」「べき」という形容を付けた言明は、よほどの場合を除き偽になるわけです。メリデメの評価として、あるいは「気にいらない」だけの理由でTSを拒否してももちろんかまいません。そんなのは人の勝手です。

(追記)

こちら[1] の回答によれば、Google App Scriptは「手元ビルド」を介在させる利用法ができ、そのためのツールclaspはすでにTypeScriptに対応していて、デプロイ時にtypescriptで変換をかけてアップロードできます。なのでgasでtsが使えないということではなく、ビルドを踏むのであれば利用できます。

脚注

Yasuo Ohgaki
 さん他より2件のコメント

ぜひ書いてほしいです。あなたが書こうとするコードは未来のメンテナンス対象です。少しでも複雑化すると書いた本人でも意図がわからなくなることがあります。

そういう時に型や、インターフェースを使って制約する事で未来の自分にコードの意図を伝えやすくなります。コメントで伝えるより合理的ですし。

石塚 正浩さんのプロフィール写真

「べき」とまでは思わないですが、導入自体はかなり手軽なので使わない理由はないかもとは思います。

一度やり始めると、もう .jsファイルを直に作る気になれないという声を良く聞きます。義務感で始めずに、なにが便利なのかを知るところから初めて見ると良いのではないでしょうか。

0 コメント:

コメントを投稿