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 という流れをつくりたい。