TypeScript豆知識集
はじめに
この記事はTypeScript Advent Calendar 2023の15日目の記事です。
フロント開発からバックエンド開発まで、みなさんが大好きなTypeScriptですが、今回は意外と?知られていない豆知識を紹介していきたいと思います。
技術的に為になる記事は他のみなさんが書いてくださっているので、僕は今回ネタ枠で投稿させてもらいます!
作者
TypeScriptは天下のMicrosoft社によって開発されているOSSのプログラミング言語です。
C#のリードアーキテクトでもあるアンダースヘルスバーグという方によってチームが作成され、開発がスタートしました。
AltJS
TypeScriptのようにJavaScriptにトランスパイルされる言語をAltJSと読んでいました。
TypeScript以外のAltJSはほぼ滅んだので最近はあまり使われない言葉です。
たとえばCofeeScriptという言語がありました。
ここからは私の意見ですが、TypeScriptがその中で生き残れたのは、やはりJavaScriptのスーパーセットであることを選んだからでしょう。
JavaScriptの構文を壊さず、拡張する方向で構文が用意され、JavaScriptを書いていた人たちが簡単にTypeScriptに移行できました。
他のAltJSはトランスパイル後のJavaScriptが想像しづらく、学習コストも生まれてしまいました。
また、TypeScriptはランタイムにほぼ影響を与えません。
Enumなどの特殊な構文はあるものの、現在は非推奨で、基本的にはTypeScriptがJavaScriptにない機能を足すような動きはなくなりました。
バージョニング
実はTypeScriptはセマンティックバージョニングを採用していません。
破壊的変更があるかどうかはそのバージョンによって違います。
例えば5.1から5.2でも破壊的変更があります。
シンプルに3.9の次は4.0という感じで少数第一位がいっぱいになると整数がインクリメントされるというバージョニングになっています。
ランタイム
TypeScriptといえば、JavaScriptにトランスパイルされる言語のイメージがありますが、最近だとDeno、Bunといった、書いたTypeScriptがそのまま動作する実行環境があります。
厳密にはDenoもBunも一度JavaScriptに変換しているようですが、それらを意識せずにrunコマンドだけで動かせるようになるのは魅力的です。
Playground
これは知っている人も多いかもしれませんが、ブラウザ上で動くPlaygroundがあります。
使い勝手がいいので、自分はJavaScript自体の仕様確認もここでやったりします。
DefinitelyTyped
実はこれはコミュニティによって作られているので、ライブラリの実態と異なる場合があります。
もしあなたがライブラリ作者でTypeScriptでライブラリを作るのなら、これを使うのではなくてライブラリに型定義を同梱することをおすすめします。
ちなみにReactはFlowというAltJSで書かれているのでこのDefinitelyTypedから型定義が提供されています。
namespace
TypeScriptには実は名前空間があります。
また、名前空間から変数をエクスポートも出来るのですが、TypeScriptはJavaScriptのランタイムに干渉しない、文法を壊さないという方向で進化してきたのでこれもやはり忌避されています。
おわりに
長年TypeScriptをやっている方は、結構ご存知の豆知識が多かったかと思います。
知らなかった豆知識があった人はラッキーでしたね!
2024年は自分もスタッフを務めるTSKaigiが開催されますので良かったら遊びに来てください!
2023年も残りわずか、健康に気をつけてお過ごしください。
メリークリスマス!
Discussion
やっぱりWASMも他のAltJSを見なくなった原因なんですかね〜