TypeScript で co + generators したい
どうした?
callback 地獄は嫌いです。
それで?
とりあえず環境を用意します
% mkdir practice-ts-generatpr && cd $_ % tslint init % npm init --yes % npm install co --save % dtsm init % dtsm install node --save
create generator.ts:
/// <reference path="./typings/bundle.d.ts" /> const co = require("co"); co(function*() { yield Promise.resolve(true); console.log("world"); }); console.log("hello");
ただし、Generators も Promise も es5 では使えない
% tsc async.ts generator.ts(4,12): error TS1220: Generators are only available when targeting ECMAScript 6 or higher. generator.ts(5,9): error TS2304: Cannot find name 'Promise'.
どうする?
tsc の compilerOptions で target を es6 にすればいける
% tsc generator.ts --target es6 && node generator.js hello world
ちなみに
ts-node
を使いたい場合は引数で compilerOptions を指定できないっぽいので tsconfig.json
で指定します。
create tsconfig.json:
{ "compilerOptions": { "target": "es6", "module": "commonjs" } }
実行
% ts-node generator.ts hello world
あと co
の型はないらしい。まあ必要なのは型じゃないし。
% dtsm search tj/co No results.
それとも TypeScript でこういう事したい場合は asycn/await とかなんだろうか。 もう JavaScript の変化の渦に溺れている気がする。
そういえば
この記事に出てくるソースコードは以下の環境で試しました。
% sw_vers ProductName: Mac OS X ProductVersion: 10.11.3 BuildVersion: 15D21 % node -v v4.2.6 % npm -v 2.14.12 % tsc -v message TS6029: Version 1.5.3 % dtsm -v 0.13.0 % ts-node --version 0.5.5