ニュース

JavaScriptに「型」を ~Microsoftが新構文を提案へ

TypeScriptの知見をもとにした「コメントとしての型」

Microsoft、JavaScriptの型構文を提案へ

 米Microsoftは3月9日(現地時間)、JavaScript言語に型構文(Type Syntax)を提案する方針を発表した。とはいえ、一般的にプログラミング言語で「型」と呼ばれるものとはかなり違ったものになりそうだ。

 JavaScriptには型がないが、代わりに型のあるTypeScript言語で記述してJavaScriptへコンパイル(変換)したり、JSDoc形式のコメントという形でJavaScriptコードに型情報を記述することは広く行われている。こうすることで「Visual Studio Code」をはじめとする開発環境は型情報を知り、型チェックや入力補完、リファクタリングといったコーディング支援機能を開発者に提供できるようになる。コーディング支援機能の有無は生産性に直結するため、多少面倒でもこうした手順を踏むことには大きな価値がある。

JSDocコメントで型情報を記述する例
/**
 * @param a {number}
 * @param b {number}
 */
function add(a, b) {
    return a + b;
}

 しかし、ちょっとしたコードにいちいちJSDocコメントを書くのは冗長だ。以下のようなTypeScript構文で型情報を記述し、そのまま実行できれば便利だろう。

新提案の構文
function add(a: number, b: number) {
    return a + b;
}

 もちろんこのままではWebブラウザーで実行できないが、「単なるコメント」として型情報(上記の例で言えば「: number」の部分)だけ無視してもらえれば、問題は簡単に解決できる。

Webブラウザーからは以下のように見える
function add(a, b) {
    return a + b;
}

 このようにすれば「型のないJavaScript」という言語仕様に大きな手を加えることなく、「あたかも型があるような構文」で記述し、コーディング支援機能の恩恵を受けられるというわけだ。この構文はTypeScriptと同じだが、今回の仕様がJavaScriptで受け入れられればコンパイルは不要となる。

現在のフローと提案中のフロー。わざわざTypeScriptを使ったり、JSDocコメントを書かなくても、そのままTypeScriptっぽいコード(JavaScript+型コメント)をWebブラウザーで実行できるようになる
型チェックなど、TypeScriptと同じ支援機能を実行可能なJavaScriptで直接利用できるのがメリット

 このアイデアは「コメントとしての型」(types as comments)と呼ばれており、同社がTypeScript言語の開発で得た知見をもとにしている。提案はまだ「Stage 0」の段階だが、同社は2022年3月の「TC39」のプレナリーミーティングで「Stage 1」の提案を発表したいとしている。「Stage 1」に到達すれば、この構文のサポートがECMAScriptで検討され、JavaScriptへの導入の道がひらける。