第4章 TypeScriptコードを書いてみる
TypeScriptでコードを書いてコンパイルする
それでは簡単なTypeScriptのコードを書いてtscでコンパイルしてみましょう。
main.ts
というファイルを作り、中身のコードを次のように書きます。Tom (16)
と出力することを想定した簡単なコードです。
function getProf(name: string, age: number): string { return `${name} (${age})`; } console.log(getProf('Tom', 16));
このTypeScriptのコードをJavaScriptにコンパイルします。次のコマンドを実行します。
npx tsc main.ts
TypeScriptをグローバルにインストールした場合は、npx tsc
はtsc
と短く書けます。
tsc main.ts
コマンドを実行するとmain.js
というファイルが出力されます。
function getProf(name, age) { return "".concat(name, " (").concat(age, ")"); } console.log(getProf('Tom', 16));
コンパイルしてできたJavaScriptのコードを実行する
出力されたファイルを、Node.jsで実行してみましょう。次のコマンドを実行します。
node main.js
Tom (16)
Tom (16)
と出力されました。通常のJavaScriptになっていることが確認できました。
第5章 tsconfig.jsonを設定する
tsconfig.jsonの作成
TypeScriptの設定ファイルtsconfig.json
をプロジェクトのルート(tscを実行するフォルダー)に作成すると、tscの挙動をコントロールできます。
tsconfig.json
は、次のコマンドで作成できます。以降、TypeScriptをグローバルにインストールしている場合は、npx tsc
をtsc
に読み換えてください。
npx tsc --init
作成したtsconfig.json
は、100行以上にわたる設定が書いてあります。そして、そのほとんどはコメントアウトされています。これは「こういう設定もある」というドキュメント的な記載です。設定の詳細は、TSConfig Referenceのページにまとまっています。
また、作成されるtsconfig.json
には、コメントが書かれていますがVSCodeで開いてもエラーは表示されません。これはVSCodeがtsconfig.json
というファイル名を特別なファイル(TypeScriptの設定ファイル)として認識しているからです。アイコンもTSという名前が付いたものになっています。
試しに、このtsconfig.json
という名前を_tsconfig.json
のように変えると、アイコンが変わってエラーが出ます。ただのJSONと認識されるためです。通常のJSONにはコメントを書くことができません。
tsconfig.jsonの読み解き
作成したtsconfig.json
から、コメントアウトされていない部分を抜粋して掲載します。また説明の日本語訳も添えます。
{ "compilerOptions": { /* Language and Environment */ "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ /* 出力されるJavaScriptのJavaScript言語バージョンを設定し、 互換性のあるライブラリ宣言を含めます。 */ /* Modules */ "module": "commonjs", /* Specify what module code is generated. */ /* 生成されるモジュール コードを指定します。 */ /* Interop Constraints */ "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ /* インポート時に大文字と小文字が正しいことを確認します。 */ /* Type Checking */ "strict": true, /* Enable all strict type-checking options. */ /* すべての厳密な型チェック オプションを有効にします。 */ /* Completeness */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ /* すべての .d.ts ファイルの型チェックをスキップします。 */ } }
この中で、自分で変更する可能性があるのはtarget
とmodule
でしょう。それぞれで選択できる内容を、TSConfig Referenceから抜粋します。
まずはtarge
です。
targetについて
URL:https://www.typescriptlang.org/tsconfig/#target
デフォルト:ES5
設定可能:es3、es5、es6/es2015、es2016、es2017、es2018、es2019、es2020、es2021、es2022、es2023、es2024、esnext
設定可能な値にあるesnext
は、特殊な値です。使用しているTypeScriptのバージョンがサポートする最高バージョンを指します。
この値を使うと、TypeScriptのバージョンを変更した際に、互換性の問題が発生する可能性があります。そのため利用には注意が必要です。
次はmodule
です。
module
URL:https://www.typescriptlang.org/tsconfig/#module
デフォルト:commonjs
設定可能:none、commonjs、amd、umd、system、es6/es2015、es2020、es2022、esnext、node16、node18、nodenext、preserve
Node.jsでrequire
を使うならcommonjs
を、import
を使うならesnext
を使うとよいでしょう。
また、コンパイル時に変換させず、元の状態を保持したい場合にはpreserve
を利用します。preserve
では、インポートやエクスポートの形式が保持されます。
tsconfig.jsonで入力と出力を分ける
いくつかの設定を追加してみましょう。TypeScriptで書いたコードを保存するsrc
フォルダーと、JavaScriptのコードを出力するdist
フォルダーを分けてみます。
{ "compilerOptions": { "target": "es2016", "module": "commonjs", "rootDir": "./src", "outDir": "./dist", "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true } }
rootDir
とoutDir
の設定を追加しました。この設定に合わせて、ファイル構造を次のように変更します。
-
プロジェクトのルート
- dist/
- node_modules/
-
src/
- main.ts
- package-lock.json
- package.json
- tsconfig.json
この状態のプロジェクトのルートで、次のコマンドを実行します。
npx tsc
すると、src
フォルダー内の.tsファイルがコンパイルされて、dist
フォルダーの中に出力されます。作成されたファイルを見てみましょう。
"use strict"; function getProf(name, age) { return `${name} (${age})`; } console.log(getProf('Tom', 16));
直接npx tsc main.js
と実行した時と、コードの形が変わっています。これは、target
の値などにより変換方法が変わったためです。こうしたコードに影響を与える設定は他にもあります。
tsconfig.json
の最適な設定内容は、開発目的や開発時期によって異なります。最適な内容にするには、その都度最新の情報を調べる必要があります