いい加減TypeScriptをきちんと使えるようになろうと思ったので、TypeScriptでNode.jsアプリ開発をするための方法を調べました。やることはNode.js用の型定義を使用することと、tsconfig.jsonのcompilerOptions
に"module": "commonjs"
を指定することです。ついでにnode_modules
以下のディレクトリを無視するように設定します。
前提条件
- Node.jsがインストールされている
- TypeScriptがインストールされている
- typingsコマンドが使えるようになっている
Node.jsは公式サイトからインストールしてください。
TypeScriptとtypingsはNode.jsをインストールした後に下記コマンドを実行すればインストールされます。
npm install -g typescript
npm install -g typings
アプリケーションフォルダの準備
準備ができたらアプリケーションフォルダを作成します。場所はどこでも良いです。
作成できたら、下記ファイルを作成します。
- MyApp.ts
- app.ts
- tsconfig.json
中身はそれぞれ以下のような感じにしてみました。
export class MyApp {
private name: string;
constructor() {
console.log('MyApp constructor');
console.log(`Node version : ${process.version}`);
this.name = 'MyApp';
}
exec() {
console.log(`Hello World! My name is ${this.name}.`);
}
}
import {MyApp} from './MyApp'
let app = new MyApp();
app.exec();
{
"compilerOptions": {
"module": "commonjs"
},
"exclude": [
"node_modules"
]
}
Node.js型定義を追加
このままではNode.jsのグローバル変数process
などをコンパイラーが解釈できないので、下記コマンドでNode.jsの型定義を追加します。
typings install dt~node --global
TypeScriptをJavaScriptにコンパイル
Node.jsで実行できるようにTypeScriptをJavaScriptにコンパイルします。
tsc
※ちなみにコンパイルはソースコードから機械語(またはそれに準ずるコード)を生成するという意味で使われてきたため、TypeScriptのようにある言語のソースコードから別の言語のソースコードを生成することをコンパイルと区別してトランスパイルということもあります。
実行
JavaScriptのファイルができたら、通常のNode.jsアプリケーションと同じように実行します。
node app.js
MyApp constructor
Node version : v6.1.0
Hello World! My name is MyApp.
これでNode.jsでもTypeScriptの静的型チェックを使った安心なアプリケーション開発ができますね!
補足
typings install dt~node --global
するときに--save
オプションも一緒に指定すると、typings.jsonというファイルが作成されます。このtypings.jsonファイルがあると単にtypings install
とするだけで必要な型定義を全て追加することができます。
この方法だとtypingsディレクトリ以下はtypings install
というコマンド一つで簡単に生成できるため、gitなどでソースコードのバージョン管理する場合にtypingsディレクトリを管理対象から外すことができます。