compileOptions で target を es6 にしておけば import {Promise} from 'es6-promise'
は不要らしい
準備
% mkdir practice-ts-pattern && cd $_ % npm init --yes
create tsling.json:
% tslint --init % cat << EOF > tsconfig.json { "version": "1.7.5", "compilerOptions": { "module": "commonjs", "target": "es6" } } EOF
create dtsm.json and typings:
% dtsm init % dtsm install node --save
create .gitignore
% cat << EOF > .gitignore node_modules typings EOF
add and commit them.
% git init && git add . && git commit -m 'initial commit'
書いてみる
ES6 で書くとこうなる
'use strict'; const getPromise = (delay) => { return new Promise((resolve, reject) => { setTimeout(() => { resolve('ok'); }, delay || 3000); setTimeout(() => { reject('ng'); }, 1000); }); } getPromise(500).then(console.log).catch(console.log); getPromise(1500).then(console.log).catch(console.log);
実行結果
% node promise.js ok ng
TypeScript で書くとこうなる
/// <reference path="./typings/bundle.d.ts" /> const getPromise: (delay: number) => Promise<{}> = (delay) => { return new Promise((resolve, reject) => { setTimeout(() => { resolve('ok'); }, delay || 3000); setTimeout(() => { reject('ng'); }, 1000); }); }; getPromise(500).then(console.log).catch(console.log); getPromise(1500).then(console.log).catch(console.log);
interface を定義する場合はこう書く
/// <reference path="./typings/bundle.d.ts" /> interface ThisInterface { (delay: number): Promise<{}>; } const getPromise: ThisINterface = (delay) => { return new Promise((resolve, reject) => { setTimeout(() => { resolve('ok'); }, delay || 3000); setTimeout(() => { reject('ng'); }, 1000); }); }; getPromise(500).then(console.log).catch(console.log); getPromise(1500).then(console.log).catch(console.log);
実行結果
ok ng