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"
    ]
}

なにもないところから書くより幾分か楽になります。 targetes5 したり、 noImplicitAnytrue にするくらいですぐに環境を整えられます。

しれっと使われている exclude も 1.6 の新機能です。指定した場所以外の *.ts ファイルを探してコンパイルしてくれるようです。

以前は files にコンパイル対象のファイルすべてを書かなくては行けなかったのでかなり手間を省けそうです。

Node

Node モジュールとの連携も強化されました。

Node だと require('./dir') とすると dir.js に加えて dir/index.js なんかもチェックしてくれるのですが、TypeScript 1.5 まででそれをやろうとすると'./dir/index' と指定する必要がありました。 1.6 からは Node に合わせるみたいです。

他には package.jsontypings という項目に *.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 でやる感じですかね。

機能としてはだいぶ出てきたと思うのでコンパイル速度とか開発ツール周りなんかを強化してほしい感じです。