TypeScript 1.5 がこの前出たばかりですが、もう 1.6 がリリースされました。幾つか機能を試してみます。
インストール
npm
で普通に入ります。
$ npm install typescript
tsconfig.json
tsc --init
を実行すると tsconfig.json
を作ってくれます。
{
"compilerOptions": {
"module": "commonjs",
"target": "es3",
"noImplicitAny": false,
"outDir": "built",
"rootDir": ".",
"sourceMap": false
},
"exclude": [
"node_modules"
]
}
なにもないところから書くより幾分か楽になります。 target
を es5
したり、 noImplicitAny
を true
にするくらいですぐに環境を整えられます。
しれっと使われている exclude
も 1.6 の新機能です。指定した場所以外の *.ts
ファイルを探してコンパイルしてくれるようです。
以前は files
にコンパイル対象のファイルすべてを書かなくては行けなかったのでかなり手間を省けそうです。
Node
Node モジュールとの連携も強化されました。
Node だと require('./dir')
とすると dir.js
に加えて dir/index.js
なんかもチェックしてくれるのですが、TypeScript 1.5 まででそれをやろうとすると'./dir/index'
と指定する必要がありました。 1.6 からは Node に合わせるみたいです。
他には package.json
の typings
という項目に *.d.ts
の場所を指定するとそのモジュールを読み込んだ時に使ってくれるようです。
型
abstract クラスがサポートされました。 実装を持った interface
ですね。今までは普通のクラスで頑張っていましたが、コンパイラがいろいろチェックしてくれるようになります。
abstract class A {
abstract value(): number;
square(): number {
return this.value() * this.value();
}
}
class B extends A {
value() {
return 1;
}
}
class C extends A {
value() {
return 2;
}
}
console.log(new B().square());
console.log(new C().square());
Intersection Type もサポートされました。 { a: number; } & { b: number; }
が { a: number; b: number; }
になります。使いどころは限られますが、今まで any
でなんとかしてた部分にきちんと型をつけられるかもしれません。
interface Pet {
name: string;
}
interface Dog {
bow();
}
interface Robot {
model: string;
}
const aibo: Pet & Dog & Robot = {
name: 'Aibo',
model: 'ERS-110',
bow: () => {
console.log('bow-wow');
}
};
console.log(`name: ${aibo.name}`);
console.log(`model: ${aibo.model}`);
aibo.bow();
1.7
Generator はスルーしましたが、逆に大きい機能はそれぐらいな印象です。
1.5 では多数の ES2015 機能に対応したり大きな変更が多かったですが、 1.6 ではいろいろとかゆいところに手が届かせる感じの変更が多いかんじです。
1.7 では今のところ **
演算子や this
の型指定なんかが(予定されている)[https://github.com/Microsoft/TypeScript/wiki/Roadmap]みたいです。 Module bundling は Browserify 的なことを tsc でやる感じですかね。
機能としてはだいぶ出てきたと思うのでコンパイル速度とか開発ツール周りなんかを強化してほしい感じです。