bouzuya.hatenablog.com

ぼうずやのにっき

Koa と TypeScript 2.0 beta をためした

旅行前の 2016-06-22koajs/koa の core っぽい部分を理解した。……はずだったのだけど、今日 bouzuya/alertwil のためにいざ書こうとするとよく分からなくて困った。旅行のごたごたで 2 週間の空白もあるし、もともと周辺の npm package を調べていないせいもある。

routing には alexmingoia/koa-router を使うつもりだ。 koajs/route という simple な router もあるのだけど、避けることにした。理由は koa-route の機能不足ではなく singleton になっている部分が気持ち悪いので避けた形だ。npm package は singleton を避けるべきだと思っている。 function / constructor などで複数の instance を作成できるようにすべきだと思っている。単一には利用者側ですれば良いだろう。

view には何も使わないつもりだ。tj/co-views を使うこともできるが使わない。co-views は tj/co-rendertj/consolidate.js を内部に使い template engine やその compiled view の cache を管理する。今回は json と twiml 。それも定型的なものだ。個別 file での view も不要だと思うので、あえて避けることにした。

あと TypeScript 2.0 beta をためしてみたのだけど、VS Code 側の対応が良くないのでやめた。具体的には VS Code 側での auto build で string | null | undefined などの 2.0 では正しい記述が Error になってしまう。typescript.tsserver.experimentalAutoBuild を有効にすると Error にならないのだけど、代わりにその他の箇所も含めて保存時に型検査されなくなる。明示的に Reload TypeScript Project すると検査してくれるのだけど、それはあんまりだ。まだ時期尚早ということだろう。VS Code の 8 月の update くらいには TypeScript 2.0 を本格的に使っていけると信じている。

追記1: Koa の Middeware は Home · koajs/koa Wiki を見ると分かりやすい。

追記2: typescript.tsdk./node_modules/typescript/lib と指定すればうまく動く (lib は global のものでも良い) 。ただし include はぼくの Macbook Air (Mac OS X) では動かない。Windows でうまく動いたという話を聞いた。