[Node.js] TypeScriptをインストール(OS X)で最後にNode.jsの型定義ファイルを取得する方法を書いたけど、2015/7/7時点での最新のやつを使ってみるとこんなエラーが出た(^^;)
追記にしようかと思ったけど、長くなったので別の投稿にした。
typings/node/node.d.ts(260,26): error TS2304: Cannot find name 'DataView'. typings/node/node.d.ts(274,21): error TS2304: Cannot find name 'Map'. typings/node/node.d.ts(283,21): error TS2304: Cannot find name 'Set'. typings/node/node.d.ts(293,25): error TS2304: Cannot find name 'WeakMap'.
いろいろ調べてみると、エラーになっているのはES6で追加されるやつっぽい。
回避方法に--target es6とか付けてコンパイルすればいいとか、あったんだけど別のエラー出るし・・・。それを回避するにはさらに〜.d.tsファイルのimportのところをES6の変えてまわるって・・・。この方法を書かれていたブログのコメントにあった方法を参考にいろいろやってみた。
ES5のまま、ES6のlib.es6.d.tsを参照するというものだ。
次のようなtsconfig.jsonをプロジェクトのディレクトリに作る。
{
"version": "1.5.0-beta",
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noLib": true
},
"files":[
"/usr/local/lib/node_modules/typescript/bin/lib.es6.d.ts",
"./test.ts"
]
}
tsconfig.jsonは、IDEなんかであるプロジェクトファイルやMakefileにあたるようなものだ。
見ればわかると思うが、コンパイラーオプションのnoLibオプションでデフォルトのlib.d.tsを使わないようにして、filesにlib.es6.d.tsを入れる。lib.es6.d.tsの場所はNode.jsやTypeScriptをインストールした場所によって変わってくるので自分の環境での場所に置き換えてくれ!
test.tsは作ろーとしているアプリのTypeScriptのファイルだ。
で、ターミナルで
$ tsc
とやると、コンパイルされて、test.jsができる。
試していないけど、targetにes5を指定してるのでSetやMapは当然使えないだろうな。
もう一つ、回避方法を書いておく。
よーは、ES6で追加された要素が含まれる前のバージョンの型定義ファイルを使う方法だ。(これは、これでなんか問題あるかもしれんが)
たぶん、現時点で1つ古いバーションの0.11.0を入れてみる。
プロジェクトのフォルダで次のようにtsdを実行する。
$ tsd install node -ors --semver=0.11.0
すると、"./typings/node/node-0.11.d.ts"ができる。
tsファイルのあたまに
// <reference path="./typings/node/node-0.11.d.ts" />
を付けるとエラーにならなくなる。
さっきのtsconfig.jsonを使う場合、noLibのところはfalseにlib.es6.d.tsの行は削除する。
さて、どっちがいいんだろうか。
(追記 2015/8/29)
今日、tsd使ってnode.jsの型定義ファイルを取得して試してみると、うまいこといった。あっ、この投稿で試したのはTypeScript 1.5.0-betaか、今はTypeScriptも1.5.3になってる。