TypeScript 1.8 で JavaScript を直接インポートできるようになるみたいなので試してみました。

インストール

まだ開発版なのでバージョンをちゃんと入れる必要があります。

$ npm install -g typescript@1.8.0-dev.20160125

JavaScript をインポートする

まずは JavaScript を TypeScript から インポートする簡単なコードを試してみました。

// a.ts

import * as b from './b';

b.add(1, 2);
// b.js

export function add(x, y) {
    return x + y;
}

これをコンパイルするには --allowjs オプションをつけます。

$ tsc --outDir out --module commonjs --allowjs a.ts

out/a.jsout/b.js ができます。 b.js も単純なコピーではなく変換されていました。

肝心の型チェックですが b.add(1, {}) はエラーになりませんでしたが b.add(1, 2, 3) は引数の数が合わないとコンパイルエラーになりました。ほかには b.jsexport const add(x, { y }) => x + y; にした場合は第二引数にy というプロパティがあるかどうかだけはチェックしてくれるみたいです。

ガッツリ型チェックがほしい場合は .ts にすると思うのでこれでいいのかもしれません。

JavaScript から TypeScript を読み込む

上の例の b.js から TypeScript を読み込むのも試してみました。

// b.js

import { sum } from './c';

export const add = (x, y) => sum(x, y);
// c.ts

export function sum(...xs: number[]) {
    return xs.reduce((a, b) => a + b, 0);
}

こんなふうに JavaScript から TypeScript をインポートしても普通にコンパイルできました。

ただし b.js のなかで sum({}) のように型が合っていなくてもエラーは出ませんでした。 JavaScript の内側では型はチェックしてくれないみたいです。

まとめ

TypeScript 1.8 の新機能を試してみました。既存の簡単には TypeScript に直せないコードを少しずつ移行する場合に経便利かもしれません。

型チェックは関数の引数など一部だけで基本は any になってしまうので接合部では気を使う必要がありそうです。