[TypeScript]Don't Let Me Down(Remastered 2021)
TL;DR
TypeScriptで変数の宣言を行うときにlet
ではなくconst
を使いましょう。
最初は上記タイトルで記事を書こうと思っていましたが、タイトルだけが独り歩きしてしまい代理戦争が起こっても困るので洋楽っぽいタイトルにしました。
きっかけ
久しぶりにTypeScript公式ドキュメントを読み返して便利な機能がないか確認しようと思っていたところ、ありとあらゆる変数宣言がletではなくconstに変わっていました。
私のTypeScript歴は非常に長く、確か2016年のTypeScript2.0から使っておりずっと公式ドキュメント通りletを使用していたので古い知識で止まっていたのかと不安になりました。
TypeScript const いつから
調べてみました!
いつから
www.typescriptlang.org
のウェブサイトは上記リポジトリで管理しています。
ちなみに日本語訳は上記リポジトリで管理していますが、TypeScript-Websiteのほうが先に編集されるためこちらで調査してみます。
まずこれが古いドキュメント、正確にはTypeScript Handbook v1のMarkdownファイルですが、letを26回、constを2回使用していますね。ほぼletです。
Latest commitが2021/3/5でした。なので完全に置き換わったのはこのタイミングで間違いないようです。
ブログでも紹介されていました。
これが新しいドキュメント、TypeScript Handbook v2のファイルですが、constを40回、letを2回使用しています。
2020/8/28に、WIPで始めていたTypeScript New HandbookのGitHubリポジトリを置き換えたようです。
ただv2ドキュメントはベータ版だったため2020/8/28~2021/3/5の間はwww.typescriptlang.org
ではなくwww.staging-typescript.org
で最も新しいドキュメントが公開されいていたようです。
ここです。
上記ウェブサイトで今後もStagingが公開され続けるかどうかはわかりません。
コピーサイトのようなURLですね。
また2020/8/28以前のWIPドキュメントはArchivedで残っています。古いので現在は読む必要一切ありませんがいつ頃letからconstに変わったのか見てみましょう。
2018/9/25頃[1]にはGitHub Pages上で確認できるページが出来上がっており、この時のMARKDOWN-DEMO.mdで既にconstを使用したTypeScriptで執筆されていたそうです。
なので「いつから」の回答は2018/9/25が無難ではないでしょうか。
TypeScript3.0の頃じゃん!
ちなみに2018/9/25~2020/8/28のWIPドキュメントはこんな感じだったそうです。
だからなに
ES6はconstで書く人が圧倒的に多いと思いますし、その延長線で2018/9/25より前からTypeScriptもconstで書く人は一定数いると思いますが、TypeScript公式ドキュメントがletだからという理由でずっとletで書き続ける人、いるのではないでしょうか? 私です。
例えばTypeScriptの黎明期にお世話になった人も多いであろうjs STUDIOさんやGoogle検索で上位に出てくるとほほさんはTypeScript Handbook v1を参考にしているためletを使用しています。
ただ少し前から話題になっているGoogle TypeScript Style Guideはconstがデフォルトであると書かれていますし、TypeScriptを使うことができるDenoのFirst stepsはconstで記述されていますので、TypeScriptはconstで書くものだと思ったほうが良いでしょう。
そして何より最近になって正式に公開されたTypeScript Handbook v2ではconstを使っているのでそうしたほうがいいです。
まとめ
PDFやEPUBで古いTypeScript Handbook v1をダウンロードしたままになっている人は新しいTypeScript Handbook v2をダウンロードしましょう。
後で変数の初期化を行ったり、再代入する予定が無いのであればconstを使いましょう。
再代入する場合はletを使いましょう。
varを使用している人は99.99%[2]間違えているのでconstかletを使いましょう。
ところでDon't let me downは「私をがっかりさせないでください」という意味らしいです。お気持ち表明失礼しました。
Discussion