14
15

More than 5 years have passed since last update.

JavaScript から TypeScript への移植手順

Last updated at Posted at 2014-05-11

Node.js
TypeScript

はじめに

この記事では、JavaScript ネイティブで書かれたコードをそのまま TypeScript のソースとしてコンパイル・実行できるということを示し、また、DefinitelyTyped から定義ファイルをダウンロードすることにより、インテリセンス(オートコンプリート)を使った開発ができるようにする手順を示す。(手順のメモ)

JavaScript のスーパーセットだから、JavaScript 資産がそのまま再利用できます。

↓Visual Studio のメニューから「ファイル」⇒「新規作成」⇒「プロジェクト」を選択する。以下のようなダイアログが表示されるので、左のペインで TypeScript を選択して「Blank Node.js Console Application」を選択する。「名前」と「場所」を確認して OK をクリックする。
2014-0511-1825.png

↓「console.log('Hello world');」のみを含んだメインプログラム(app.ts)が開かれる。
2014-0511-1832.png

「console.log('Hello world');」を消して、以下のソースを貼り付ける。

(以下のソースは、NodeとRubyとPythonでスクレイピング からの引用です。)

app.ts
var request = require('request'),
    cheerio = require('cheerio');

var url = 'http://google.co.jp';

request(url, function (error, response, body) {
    if (!error && response.statusCode === 200) {
        var $ = cheerio.load(body),
            title = $('title').text();
        console.log(title);
    }
});

Ctrl+Shift+B を押してビルドするとエラーなしにコンパイルできる。
コンパイル後、Ctrl+F5 で「デバッグなしで開始」を実行する。

↓request モジュールをインストールしていないので実行時エラーとなる。
2014-0511-1842.png

Visual Studio から npm を呼び出せます

↓ソリューションエクスプローラーから npm を右クリックし、Manage npm Modules... を選択(クリック)する。
2014-0511-1846.png

↓ダイアログの上部にあるテキストボックスに「request」と入力してモジュールを絞り込む。
request というモジュールを選択して Install をクリックする。
2014-0511-1852.png

↓少し待つと、Installed Locally という表示がついて request モジュールがインストールされたことが確認できる。
2014-0511-1854.png

↓ソリューションエクスプローラーでも request モジュールがインストールされていることが分かる。
2014-0511-1858.png

↓Ctrl+Shift+B を押してビルドした後、再び Ctrl+F5 で「デバッグなしで開始」を実行する。
今度は cheerio というモジュールがないと怒られる。
2014-0511-1900.png

↓ソリューションエクスプローラーから npm を右クリックし、Manage npm Modules... を選択(クリック)し先ほどと同様の手順で cheerio モジュールをインストールする。
2014-0511-1905.png

実行時エラーはなくなったが、コンソール画面がすぐとじてしまう

↓Ctrl+Shift+B を押してビルドした後、再び Ctrl+F5 で「デバッグなしで開始」を実行する。
今度は実行時エラーとならず成功した。
2014-0511-1908.png

↓実行は成功したのだが、結果を表示した瞬間にコンソール画面が閉じてしまって動作確認が困難だったので調べてみたら、以下の設定をすることでキーを押すまでコンソール画面が閉じないようにできることがわかった。
「ツール」⇒「オプション」を選択し、ダイアログの左ペインから Node.js Tools を選択し、「Wait for input when process exits normally」にチェックを入れる(デフォルト(初期)設定ではチェックが入ってない)。
2014-0512-2328.png

↓このように「Press any key to continue...」と表示されて止まるようになった。
2014-0512-2334.png

インテリセンスを効かせるために import を使ってモジュールを参照する

次に、request モジュールと cheerio モジュールの定義情報を用いてインテリセンス(オートコンプリート)が働くように設定する。
先ほどのソースを次のように変更する。require のある行の var を import に修正する。

app.ts
import request = require('request');
import cheerio = require('cheerio');

var url = 'http://google.co.jp';

request(url, function (error, response, body) {
    if (!error && response.statusCode === 200) {
        var $ = cheerio.load(body),
            title = $('title').text();
        console.log(title);
    }
});

↓外部モジュールの定義が見つからずエラー(コンパイルエラー)となる。
定義ファイルをダウンロードしてくる必要がある。
2014-0511-1915.png

定義ファイルをダウンロードするには次のサイトにアクセスする
 ⇒ https://github.com/borisyankov/DefinitelyTyped

↓プロジェクトが新規に作成された直後は node.d.ts しか定義ファイルがない。
node.d.ts は Node.js のビルトインのモジュールの定義情報を含んでいる。
2014-0511-1921.png

request.d.ts, cheerio.d.ts に加えて依存関係にある form-data.d.ts もダウンロードして加えた。
2014-0511-1926.png

↓そうするとコンパイルエラーが消えて、インテリセンス(オートコンプリート)も有効となった。
2014-0511-1941.png

↓ 定義(.d.ts)ファイルをソリューションエクスプローラーで追加した際に陥る罠がある。
追加した各定義ファイルをソリューションエクスプローラー上でクリックして下段のプロパティを確認してほしい。Build Action が TypeScriptCompile になってれば OK だが、その他の設定だと定義ファイルが認識されない(有効にならない)から気をつけてほしい。
2014-0511-2028.png

終わりに

DefinitelyTypedには主要な(ネイティブ)JavaScript ライブラリに対応する定義ファイルがアップされているので、使いたいライブラリがあれば、まずこのサイトをチェックしてほしい。
この記事の文章内容は時を追って修正していくつもりである。

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15