概要
TypeScriptは、Microsoft社が開発を進めている言語で、JavaScriptをより使いやすくすることを目的としています。この言語は、2012年10月3日に正式に発表されました。このページでは、Microsoft社とは関係のない、TypeScriptファンの一開発者の観点から、TypeScriptの使い方について学習した内容についてまとめます。内容についてはできる範囲で正確であるように注意しますが、最も正確な内容は、TypeScriptのサイトにあるものを参照してください。
※TypeScriptは、Microsoft社の登録商標です。
このページについて
ページ作成時点のバージョン等
現時点(2012年10月)で、TypeScript Language Specification version0.8が公開されています。このページの内容は、この版に基づきます。
Type Script Language Specification version 0.8は、TypeScriptのサイトから入手することが出来ます。
ページ内容の作成予定
このページ内容の作成順については、"TypeScript Language Specification0.8"(以降 "LS0.8"と略)の目次に準じて展開していく予定です。TypeScriptとは
(本節は、LS0.8のIntroduction部分より、要約しつつ引用)今日、Webアプリケーション(e-mailや地図など)では、JavaScriptのコンポーネント群が多用されています。TypeScriptは、大規模なアプリケーションを構築し、保守していくチームのニーズに合うように設計されています。
- ソフトウェアコンポーネント間のインターフェースを定義し、既存のライブラリの振る舞いを深く知ることができるようにすること。
- コードを組織化する方法を提供し、モジュールを動的にロードする機構を提供することで、名前空間の衝突を減らすこと。
- TypeScriptが独自に提供する型システムを用いることで、生産性が高い開発環境を手に入れることができるようにすること。(静的検査、シンボルをベースとしたコードのナビゲーション、構文の保管、リファクタリングなどのこと)
TypeScriptは、JavaScriptのシンタックスシュガーで、Ecmascript 5(ES5)のスーパーセットになっています。従って、すべてのJavaScriptのプログラムは、TypeScriptで利用可能なプログラムでもあります。
TypScriptのコンパイラーは、ローカルな環境でソースをJavaScriptに変換します。その際、TypeScriptで宣言された変数の順番を変えないようにするため、生成されたJavaScriptのソースは、入力のTypeScriptのソースと近いものになります。
TypeScriptのコンパイラーは、変数名を変更しないため、JavaScriptになったあとにも、同じ名前で動作を追いかけることができます。
TypeScriptの構文は、Ecmascript6(ES6)に提案されている特徴のうち、いくつかを内包しています。classやmoduleが該当します。classは、プログラマが慣れしたしんだプログラミング構造を提供します。moduleは、プログラマが、名前空間の衝突を回避しつつ、コンポーネントを組織化していく際に用いることができます。
TypeScriptは、JavaScriptプログラマーに、型のアノテーションのための機構を提供します。これは、Closureに見られる、JSDocコメントに似ていますが、TypeScriptでは、構文の中に直接記述できる形で実現されています。これにより、アノテーションで記述されている内容が、ソースと密に連携して動作することが出来ます。
TypeScriptの型システムは、JavaScriptのオブジェクトの制約を明確にするためことができ、この制約にそった利用方法となるように強制することが可能です。アノテーションが使いやすく、最小限で済むようにするため、TypeScriptでは、型の推論を行います。例えば、
var i = 0という文があった場合、iは数値型の変数であると推論されます。
function f() {という関数があった場合、この関数は文字列型を返すものであると推論されます。
return "hello";
}
TypeScriptの機構があることで、プログラマーは、開発環境によるコード補完の支援や、静的検査などの機能を利用することができるようになります。
上記の例では、さらに、引数に型をつけることで
function f(s : string) {引数が文字列型であることをTypeScriptの構文検査器に知らせることができるようになります。これにより、上記の関数に対して、f("a")という呼び出しは可能ですが、f({})という呼び出しにはコンパイル時にエラーが出力されるようになります。
return s;
}
このとき、実際にTypeScriptコンパイラーにより出力されるJavaScriptは、
function f(s) {というものであり、すべてのアノテーションが削除されていることが分かります。
return s;
}
(つづく)
関連記事一覧
- アンビエントな宣言
- 関数(Function Types)
- オブジェクト(Object Types)
- 構造的なサブタイピング(Structural Subtyping)
- コンテクストに沿った型付け(Contextual Typing)
- クラス(Classes)
- モジュール(modules)
0 件のコメント:
コメントを投稿