TypeScriptでexpressを使ってHello worldしてみた。けっこうはまったのでメモメモ。使ってるTypeScriptのバージョンは1.0.1。
準備
npm install -g typescript npm install --save express
試しにコンパイル
こんな感じのコードを書いてコンパイルしてみる。
$ tsc --module commonjs hello.ts
コンパイルエラーが...(;´Д`)
./typescript-sample/server/hello.ts(1,1): error TS2071: Unable to resolve external module ''express''. ./typescript-sample/server/hello.ts(1,1): error TS2072: Module cannot be aliased to a non-module type. ./typescript-sample/server/hello.ts(2,1): error TS2071: Unable to resolve external module ''http''. ./typescript-sample/server/hello.ts(2,1): error TS2072: Module cannot be aliased to a non-module type. ./typescript-sample/server/hello.ts(5,11): error TS2088: Cannot invoke an expression whose type lacks a call signature. ./typescript-sample/server/hello.ts(6,17): error TS2095: Could not find symbol 'process'.
定義ファイルをコピー
いろいろググったところ、expressやNode.jsの標準ライブラリの定義ファイルみたいなものが必要らしいので、ここから以下の2つをhello.tsと同じディレクトリに配置する。
- node/node.d.ts
- express/express.d.ts
なお、express.d.tsのL13は
/// <reference path="node.d.ts" />
のように修正する必要がある。(ディレクトリ構造が違うため。これ、DefinitelyTypedのディレクトリ構造のままじゃ駄目なのかなー?)
追記
$ npm install -g tsd $ tsd query express --save --resolve --action install
して、hello.ts に
/// <reference path="typings/tsd.d.ts" />
を追記することで型定義ファイルを参照することができるようになった。vvakame さんありがとうございます!
もう一度コンパイル
これでもう一回コンパイルしてみる。今度は成功するはず。
$ tsc --module commonjs hello.ts
あとは生成された hello.js を実行して、http://localhost:3000/ にアクセスして Hello world!
と表示されればおk
ちなみに --module
というオプションは生成するJSのモジュール形式。
commonjs
を指定するとCommonJS形式(Node.jsのrequire)amd
を指定するとRequire.js形式(ブラウザで使う場合)
となるみたい。
あわせて読みたい
IntelliJ IDEAでTypeScriptの開発環境を作ってみる - おいぬま日報
- 作者: わかめまさひろ,井上章,丸山弘詩
- 出版社/メーカー: インプレスジャパン
- 発売日: 2014/05/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る