2016-01-09 TypeScript で Qiita 記事を数える script をつくった
今日つくりかけている free cell ではなく、2016-01-07 につくった bouzuya/cars-counter-qiita-items のことを書く。
bouzuya/cars-counter-qiita-items は bouzuya/cars の counter のひとつだ。 Qiita への投稿数を収集する。
この cars counter script の目的は 2016 年の数値目標のひとつである Qiita 記事の投稿数にを自動で計測するためだ。
実装は TypeScript で書かれており Node.js で動く。npm package "node-fetch" および npm package "moment" を利用している。JavaScript で書くとなんてことはないものなのだけど……。
今回の経験としてはまた .d.ts の問題。
moment は .d.ts で export default moment ではなく export = moment されている。なので import moment from 'moment'; では import できない。import * as moment from 'moment'; すると import できる。
import * as moment from 'moment'; の場合は moment が { default: moment ... } になる。これにより moment() で実行時に error が出る。かといって moment.default() は .default が定義されていないため、型 error になり compile できない。
対処方法が分からず、諦めて .d.ts を copy & paste して export = moment 部分だけを書き換えたものを使うことにした。
node-fetch は DefinitelyTyped に存在しない。whatwg-fetch はあるのだけど、これは window.fetch のためのものなので moment と同様に copy & paste して対応した。
TypeScript の import / export はまだ問題があるように見える。TypeScript の持つ何種類もの import / export をそれぞれが統一せずに利用している。ぼくは TypeScript に詳しくない。それでも JavaScript の superset を目指しているなら module は es6 module にならうのだろう。
ぼくは es6 > babel > browserify の先頭に typescript を加えたい。つまり typescript > es6 > babel > browserify という流れをつくりたい。