現在当社ではフロントエンドを担当をしております。
今回はtsconfig.jsonとESについて記事を書かせて頂きます。長文となりますがよろしければご覧ください。
背景)業務でtsconfig.jsonを修正する機会があったため(現バージョンtarget:ES5ではPromise.allSetteledが使えないが、使いたかったため)。
目的)最新のES(JavaScript の標準化が行われていてその基本となる仕様)の仕様について知り、効率の良い開発と本番でどのバージョンを適用させるかを選定するための参考にする
目次
- tsconfig.jsonとは
- ompilerOptionsの一部オプションとtargetを最適化するメリット
- es2022で使えるようになった新機能
1.tsconfig.jsonとは
Node.js(javaScript実行環境)においてTypeScriptを使えるようにするための設定ファイル
2.compilerOptionsの一部オプションとtargetを最適化するメリット
compilerOptionsの一部オプション
target・・・どのバージョンのJavaScript向けに出力するか決める
lib・・・targetではまだサポートしていないが Node.js で使えるようになっている
API をlibを指定することによって使える。(使いたいtargetには使いたいラ
イブラリがない、でも使いたい時に指定する(指定しなくても良い))
[nodejsとtargetの対応](https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping)
#nodejsのバージョン確認 $node --version $v16.17.0
・nodeのバージョンが16なのでtargetにはES2021が妥当というドキュメントもありましたが(現状全モダンブラウザ(Google Chrome・Firefox・Safari・Microsoft Edge)でES2022の全機能が使用可能)、Can I Use によると ES6が妥当だということでした。
*注意事項 ①targetを最新にしても、動作する環境が古いままだと使うことはできない
②新たな記法が生まれるよりも前のtargetに設定すると、新たな記法で書いても
コンパイル時に指定した targetで有効な構文に変換する
targetを最適化するメリット
余計なTranspile(あるプログラミング言語から、他のプログラミング言語に変換す
る)が省かれててコードサイズや実行時間が最適化される
検証)
target es5→es6に変更すると
0.2MiB削減(13.8MiB→13.6MiB)されました。
3.es2022で使えるようになった新機能 *抜粋して紹介
(使いたかったPromise.allSettledはES2020の時点で使用可能になってました)
https://zenn.dev/moneyforward/articles/es2022-whats-new?redirected=1
****`#`を使ってプライベートなフィールドを宣言できる**
TypeScriptのprivate→実行環境ではpublic
# →実行環境でもprivate
// デモ class MyClass { // public field foo = "public field: 寿司"; // private field #bar = "private field: ラーメン"; // public static field static qux = "public static field: うどん"; // private static field static #corge = "private static field: 麻婆豆腐"; // public method grault() { return console.log("public method: みかん"); } // private method #garply() { return console.log("private method: ぶどう"); } // public static method static waldo() { return console.log("public static method: みかん"); } // private static method static #fred() { return console.log("private static method: ぶどう"); } constructor() { console.log(this.#bar); console.log(MyClass.#corge); this.#garply(); MyClass.#fred(); } } console.log(MyClass.qux); MyClass.waldo(); // 実行してしまうとprivateにつきエラー // console.log(MyClass.#corge); // MyClass.#fred(); const myInstance = new MyClass(); console.log(myInstance.foo); myInstance.grault(); // 実行してしまうとprivateにつきエラー // console.log(MyClass.#bar); // MyClass.#garply();
補足)
.eslintrcファイルがある場合は
"env"
プロパティに"es2021": trueを追加すると
ECMAScript 2021で書かれたコードを静的検証できます。
参考資料)
tsconfig.jsonを設定する | TypeScript入門『サバイバルTypeScript』
https://zenn.dev/moneyforward/articles/es2021-whats-new
https://zenn.dev/moneyforward/articles/es2022-whats-new?redirected=1
【Node.js入門】バージョン管理と確認方法のまとめ! | 侍エンジニアブログ
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled
https://gist.github.com/azu/56a0411d69e2fc333d545bfe57933d07
https://www.tohoho-web.com/js/what.htm