ハードルを下げ続けるブログ@task

常に低い意識で投稿していきたいエンジニアのブログ。当ブログの内容は、個人の見解であり所属する組織の公式見解ではありませんよ。

【日本語訳】Announcing TypeScript 4.0 (1)

はじめに

TypeScript 4.0 がリリースされました 🎉🎉

Variadic Tuple Types などタプル周りの型が大きく強化されています。

公式の紹介記事を一通り、読んだのでより理解すべく日本語訳してブログに乗せておきたいと思います。 わかりやすさのため一部意訳しています。また、導入は省略します。

誤訳や間違った部分があれば教えて下さい。

devblogs.microsoft.com

なお、TypeScript 4.0 では大きな互換性を破壊する変更は無いとのことです。

With TypeScript 4.0, there are no major breaking changes.

The 4.0 Journey

TypeScript は今日、JavaScript 技術スタックの中核となっています。npm 上では、7月には初めて月間ダウンロード数が5000万を突破しました!また、私達は常に成長と改善の余地があると認識していますが、TypeScript を使っている人のほとんどが、コーディングを楽しんでくれているのは明らかです。 StackOverflow の最新の開発者アンケートではTypeScriptが最も好きな言語の第二位にランクインしていますし、最新の State of JS Survey では、TypeScript 使った開発者の89%がまた使うだろうと言っています。

私達のここまでの道のりを少し掘り下げてみましょう。過去2つのメジャーバージョンでは、長きに渡り輝いてきたハイライトを振り返ってきました。TypeScript 4.0 でもその伝統を引き継ぎます。

3.0 以降を振り返って、めまいがするほど多くのの変更がありましたが、TypeScript 3.0 自体が強力なものになりました。 タプル型と引数リストを統合したことは大きなハイライトであり、既存の JavaScript パターンの多くを関数で利用できるようになりました。また、このリリースでは、コードベース全体でのスケールアップ、整理、共有を支援するためのプロジェクトリファレンスも紹介しています。インパクトの大きい一つの小さな変更点は、3.0 が unknown という any の型安全な代替型を用意したことでした。

TypeScript 3.1 では、タプル型や配列型で動作するように Mapped types の機能が拡張され、使用されなくなった TypeScript 固有のランタイム機能に頼ることなく関数にプロパティを割り当てることが劇的に容易になりました。

TypeScript 3.2 はジェネリック型のオブジェクトスプレッドが可能になり、3.0の能力を駆使し、 bindcallapply の厳密な型付けをすることで、関数を使ったメタプログラミングをより良くモデル化することができました。

TypeScript 3.3 では、3.2に続いて安定性にちょっとだけ焦点を当てましたが、同時に Union 型メソッドを使用する時の QOL の改善をもたらし、--build モード下での file-incremental build を追加しました。

TypeScript 3.4にて、イミュータブルなデータ構造のサポートをより充実させて関数型パターンをより深くサポートすることに傾向し、高次ジェネリック関数の型推論を改善しました。大きな追加点として、このリリースでは、--incremental フラグが導入されました。このフラグを使用すれば、TypeScriptを実行するたびにフルリビルドが走るのを回避して、より早くコンパイルと型チェックの結果を得ることができます。

TypeScript 3.5 と 3.6 では、よりスマートな互換性検証ルールとともに、型システムルールが厳格化されました。

TypeScirpt 3.7 はECMAScriptと新しい型システムの豊富な組み合わせを特徴としており、非常に注目に値するリリースでした。型システム側から見ると、再帰的な型エイリアス参照とアサーションスタイル関数のサポートがありました。JavaScript側では、オプショナルチェーンと合体が追加されました。これは、TypeScirptとJavaScript のユーザー双方にとって最も要望の多かった機能であり、TC39で私達のチームが一部で支持したものでした。

もっと最近の 3.8 と 3.9 では、型のみの imports/exports や private fields のような ECMAScript の機能、module 内でのトップレベawait 、新しい export * シンタックス が導入されました。

言語サービス、インフラストラクチャ、Webサイト、その他のコアプロジェクトなど、TypeScript の体験にとって非常に価値のある作業のすべてにはまだ触れていません。コアチームのプロジェクト以外にも、エコシステムに信じられないほど貢献してくれるコミュニティがあり、(TypeScript の) 体験を推進し、DefinitelyTypedやTypeScriptそのものを支援してくれています。DefinitelyTyped が始まった2012年には、当初 80 PRほどしかありませんでしたがその年末には増加に転じています、2019年には、8300を超える PR があり、これは今でも私達を驚かせています。このようなたくさんの貢献は、TypeScript の体験にとって礎となるものであり、私達がエコシステムを改善し、常に改良していくための後押しをくれる、活気に満ち溢れた熱心なコミュニティに感謝しています。

(その2に続く)


全訳って大変ね… TypeScirpt 3.x の振り返り部分だけしか訳せてないけど、モチベ維持したいので公開しておきます。 3.x の振り返りにはいい感じでした