TypeScript
TypeScript | |
---|---|
ファイル:TypeScript Logo.png | |
拡張子 | .ts |
パラダイム | マルチパラダイム : スクリプト、オブジェクト指向、構造化、命令型、関数型、ジェネリック |
登場時期 | 2012年10月1日[1] |
設計者 | マイクロソフト |
開発者 | マイクロソフト |
最新リリース | 2.9.2/ 2018年6月13日[2] |
影響を受けた言語 | JavaScript, Java, C# |
影響を与えた言語 | AtScript |
ライセンス | Apache License 2.0 |
ウェブサイト | www.typescriptlang.org |
TypeScript はマイクロソフトによって開発され、メンテナンスされているフリーでオープンソースのプログラミング言語である。TypeScriptはJavaScriptに対して、省略も可能な静的型付けとクラスベースオブジェクト指向を加えた厳密なスーパーセットとなっている。C# のリードアーキテクトであり、DelphiとTurbo Pascalの開発者でもあるアンダース・ヘルスバーグが TypeScript の開発に関わっている[3][4][5][6]。TypeScriptはクライアントサイド、あるいはサーバサイド (Node.js) で実行されるJavaScriptアプリケーションの開発に利用できる。
TypeScriptは大規模なアプリケーションの開発のために設計されている。
TypeScriptはJavaScriptのスーパーセットであるため、既存のJavaScriptプログラムは、全て有効なTypeScriptプログラムとなる。
TypeScriptは型定義ファイルをサポートしており、既存のJavaScriptライブラリに型情報を付与して利用できる。既存のオブジェクトファイルの構造を記述できるC/C++のヘッダファイルとよく似た仕組みである。これによって、その型定義ファイル内で定義された値を、他のプログラムがあたかも静的に型付けされたTypeScriptエンティティであるかのように利用することができるようになる。jQuery、MongoDB、D3.jsのような人気のあるライブラリのための、サードパーティーのヘッダファイルがある。Node.jsベーシック・モジュールのためのヘッダも入手可能で、Node.jsプログラムの開発もTypeScriptの中で行える[7]。
TypeScriptの主要な実装は、自身もTypeScriptで書かれた、JavaScriptへのトランスコンパイラである。ライセンスはApache 2 License。
TypeScriptはMicrosoft Visual Studio 2013 Update 2以降でfirst-classプログラミング言語として、C# やその他のマイクロソフト言語群とともに含まれるようになった[8]。 公式の拡張パックによりMicrosoft Visual Studio 2012 でも TypeScript をサポート可能である[9]。
Contents
歴史
TypeScriptはマイクロソフトで2年間かけて内部開発された後、2012年10月に初めて外部に公開された (version 0.8)[10][11]。発表から間もなく、ミゲル・デ・イカザは、この言語そのものについては称賛しつつも、Microsoft Visual Studio以外では成熟した統合開発環境 (IDE) でのサポートがなく、LinuxおよびOS Xでは利用できないことには批判的であった[12][13]。2013年時点では、他のIDEでもサポートされており、特にEclipseでは、Palantir Technologies社が貢献したプラグインによりサポートされている[14][15]。Emacs、Vim、Sublime などの多くのテキストエディタもTypeScriptをサポートしている[16]。Atomプラグインも利用可能である[17]。
2013年にリリースされたTypeScript 0.9では、総称型のサポートを追加した[18]。TypeScript 1.0は Build 2014会合でリリースされた[19]。Visual Studio 2013 Update 2ではTypeScriptが組み込まれている[20]。
2014年7月、開発チームは新しいTypeScriptコンパイラを発表し、パフォーマンスは5倍増加したと公称している。同時に、当初はCodePlex上で公開されていたソースコードはGitHubに移動された[21]。
2016年9月22日、TypeScript 2.0がリリースされ、null
非許容型への対応を含む幾つかの機能が盛り込まれた[22]。
2017年2月にTypeScript 2.2がリリースされて以降は、それまで不定期だったバージョンアップを2ヶ月に1回行うリリースサイクルが定められた[23]。
背景
TypeScriptはマイクロソフトやその外部の顧客たちの間で、JavaScriptで大規模アプリケーション開発をする上での欠点を補うために作られた[24]。複雑なJavaScriptコードを扱うのは困難なことから、JavaScript言語の中でコンポーネント群を開発するのを容易にするための自作ツールが必要になった[25]。
TypeScriptの開発者は、標準との互換性や、クロスプラットフォームサポートを壊さないで済む解決策を模索した。現在のECMAScript言語標準が将来的にクラスベースオブジェクト指向をサポートする提案があることを踏まえ、TypeScriptはその提案に基づくことになった。これにより、その提案に基づいたスーパーセットであり、幾つかの点で言語の文法を拡張したJavaScriptコンパイラへと至ることとなった。このコンパイラが、言語を拡張した部分を一般的な JavaScriptへと変換する仕組みである。この意味ではTypeScriptはECMAScript 2015において期待されている機能を先取りするようなものであるともいえる。ECMAScriptの提案にないがTypeScriptに独自に搭載された機能として、静的言語解析を可能にする静的型付け機能(使用するかどうかは選択可能)がある。これは諸ツールや統合開発環境(IDE)によるサポートを容易にする。
言語の特徴
TypeScriptはJavaScript (ECMAScript 5) に次のような言語機能の拡張を加えたものである。
ECMAScript 6由来
- クラス
- アロー関数式(ラムダ式)
- オプション引数、デフォルト引数
- let, const
- テンプレート文字列 : 文字列内への変数埋め込み
- モジュール[26]
- for/of
- 分割代入
- Symbol
ECMAScript 7由来
- デコレーター
- Async/Await
独自
- 型注釈(変数、引数、戻り値などの型宣言)とコンパイル時の型チェック
- 型推論、型ガード - if文の instanceof などを利用した型推論
- インタフェース
- 列挙型
- Mixin
- ジェネリック
- 名前空間
- タプル型
- 和型, 交差型
- 型エイリアス
構文的には、静的型付けやクラス、継承、インタフェースのようなオブジェクト指向、名前空間などの機能を追加する、ECMA-262 言語標準のマイクロソフトによる実装である JScript.NET と TypeScript はよく似ている。
JavaScriptとの互換性
TypeScript はECMAScript 2015の厳密なスーパーセットであり、ECMAScript 2015はECMAScript 5(一般的にJavaScriptと呼ばれているもの)のスーパーセットである[27]。従って、JavaScriptプログラムは有効なTypeScriptプログラムでもあるので、TypeScriptプログラムはJavaScriptを境目なしに利用できる。
デフォルト設定の場合、コンパイラはECMAScript 3を出力するが、オプションによりECMAScript 3から最新のECMAScriptまでの間で出力対象を選択することができる。
TypeScriptでは、既存のJavaScriptコードを使うことができる。つまり、人気のあるJavaScriptライブラリを取り入れることができ、他のJavaScriptからTypeScriptで作られたコードを呼ぶこともできる[28]。これらの外部ライブラリに対する型宣言は、DefinitelyTyped(後述)に収録されていればnpmを用いて簡単にインストールすることができる[29]。
型アノーテーション
TypeScriptはコンパイル時における型検査を可能にするために、型アノーテーションによる静的型付けの仕組みを提供している。この仕組みの利用は任意なので、この仕組みを無視して普通のJavaScriptの動的型付けを使うこともできる。
function add(left: number, right: number): number {
return left + right;
}
プリミティブ型のためのアノーテーションはnumber
、boolean
、string
である。弱い型付けあるいは動的型付けにする場合は、any
型を用いる。
既にJavaScriptにコンパイルされた型を使うTypeScriptスクリプトから型情報を利用できるようにするために、型アノーテーションは別個の「宣言ファイル」に外出しすることが出来る。アノーテーションは、Node.jsやjQueryに対して行われたように、既存のJavaScriptライブラリに対しても宣言できる。
型が与えられていない場合、TypeScriptコンパイラは型を推論するために型推論を使う。例えば、上のコードにおけるadd
メソッドは、もし戻り値型が何も与えられていなかったとしても、number
型を返すと推論される。これは引数left
とright
が number
型であること、および「二つのnumber
型を加算した結果は常にnumber
型である」というコンパイラ側の知識に基づいている。しかし、明示的に戻り値型を指定しておけば、コンパイラがその正しさを検証してくれる。
宣言の不足により型推論が不可能な場合、動的なany
型がデフォルトで使われる。any
型の値に対する操作は、JavaScriptと同様の操作をサポートしているので、any
型に対する操作については最低限の静的型検査が行われるだけである[30]。
型宣言ファイル
TypeScriptをコンパイルするとき、「型宣言ファイル」(拡張子.d.ts
)を生成するオプションがある。この型宣言ファイルは、コンパイルされてできたJavaScript内のコンポーネントへのインタフェースの役割を果たす。コンパイラは、型宣言ファイルの作成過程で、関数やメソッドのコードの中身はすべて除去し、出力される型のシグネチャだけを残す。その結果として出来た型宣言ファイルには、出力されたJavaScriptライブラリまたはモジュールの仮想的なTypeScript型が記述してあり、第三者がTypeScriptを書くとき、この型宣言ファイルを読み込んで使うことが出来る。
この型宣言ファイルの概念は、C言語やC++におけるヘッダファイルとよく似ている。
declare module arithmetics {
add(left: number, right: number): number;
subtract(left: number, right: number): number;
multiply(left: number, right: number): number;
divide(left: number, right: number): number;
}
既存のJavaScriptライブラリのための型宣言ファイルは、手書きで書くこともでき、それは既にjQueryやNode.jsに対して行われた。
jQuery、MongoDB、D3.js、Node.jsといった人気のあるJavaScriptライブラリに対する型宣言ファイルを多数集めたものが、GitHubのDefinitelyTyped[31]や Typings Registryに公開されている。リポジトリから型宣言ファイルを検索しインストールするのを補助するためにtypings
というコマンドラインユーティリティが提供されている。
開発ツール
コンパイラ
TypeScriptコンパイラtsc
自体もTypeScriptで作成されている(セルフホスティング)。これは通常のJavaScript にコンパイルでき、任意のホスト上のJavaScriptエンジン(たとえばブラウザなど)上で実行できる。ライセンスは Apache License 2.0である。コンパイラ・パッケージはコンパイラを実行出来るスクリプトホストに同梱されてくる。Node.js等と共にコンパイラ・パッケージとして配布される場合もある。
また、JavaScriptで書かれたクライアントサイドのコンパイラのアルファ版もある。これはページロード中にTypeScriptコードを実行する[32]。
TypeScriptで書いたコードをブラウザ上で実行するにはコンパイルが必要。 テンプレート:Syntaxhighlight
開発環境
以下の統合開発環境 (IDE) やテキストエディタがTypeScriptに対応している。
- Microsoft Visual Studio
- 2013 Update 2から標準搭載
- JetBrains社によるReSharperプラグイン[33]
- Visual Studio Code
- WebMatrix
- IntelliJ IDEA, WebStorm
- Eclipse - Eclipse TypeScript Plug-in, TypEcs
- NetBeans - NetBeans TypeScript Editor
- テキストエディタ - Sublime Text, Emacs, Vim
- クラウド型IDE - Cloud9 IDE, Codenvy, Codeanywhere
関連項目
注釈
- ↑ TypeScript - Download: TypeScript 0.8.0
- ↑ “Releases · Microsoft/TypeScript · GitHub”. . 2018閲覧.
- ↑ Microsoft takes the wraps off TypeScript, a superset of JavaScript | ZDNet
- ↑ TypeScript: JavaScript Development at Application Scale - Somasegar's blog - Site Home - MSDN Blogs
- ↑ Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript? | ZDNet
- ↑ Microsoft Augments Javascript for Large-scale Development CIO.com
- ↑ “borisyankov/DefinitelyTyped”. GitHub. . 26 April 2015閲覧.
- ↑ TypeScript Homepage, "Visual Studio includes TypeScript in the box, starting with Visual Studio 2013 Update 2"
- ↑ TypeScript 1.0 Tools for Visual Studio 2012
- ↑ “Microsoft augments JavaScript for large-scale development”. InfoWorld. IDG (2012年10月1日). . 26 April 2015閲覧.
- ↑ Turner, Jonathan (2014年4月2日). “Announcing TypeScript 1.0”. TypeScript Language team blog. Microsoft. . 26 April 2015閲覧.
- ↑ ミゲル・デ・イカザ (2012年10月1日). “TypeScript: First Impressions”. . 2012閲覧. “But TypeScript only delivers half of the value in using a strongly typed language to Unix developers: strong typing. Intellisense, code completion and refactoring are tools that are only available to Visual Studio Professional users on Windows. There is no Eclipse, MonoDevelop or Emacs support for any of the language features”
- ↑ “Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?”. ZDNet (2012年10月1日). . 2012閲覧. “And I think this is a pretty big misstep. If you're building web apps that run on anything other than Windows, you're likely using a Mac and most likely not using Visual Studio. You need the Visual Studio plug-in to get the IntelliSense. All you get without Visual Studio is the strong-typing. You don't get the productivity benefits you get from IntelliSense..”
- ↑ “TypeScript-Unterstützung für Eclipse”. heise Developer (2013年8月6日). . 26 April 2015閲覧.
- ↑ “TypeScript”. Eclipse Marketplace. Eclipse Foundation. . 26 April 2015閲覧.
- ↑ Hillar, Gastón (2013年5月14日). “Working with TypeScript in Visual Studio 2012”. Dr. Dobb's Journal. . 26 April 2015閲覧.
- ↑ “TypeStrong: The only TypeScript package you will ever need”. . 21 July 2016閲覧.
- ↑ “TypeScript 0.9 arrives with new compiler, support for generics”. The Register (2013年6月18日). . 26 April 2015閲覧.
- ↑ Hejlsberg, Anders (2014年4月2日). “TypeScript”. Channel 9. Microsoft. . 26 April 2015閲覧.
- ↑ Jackson, Joab (2014年2月25日). “Microsoft TypeScript graduates to Visual Studio”. PC World. IDG. . 26 April 2015閲覧.
- ↑ Turner, Jonathan (2014年7月21日). “New Compiler and Moving to GitHub”. TypeScript Language team blog. Microsoft. . 26 April 2015閲覧.
- ↑ Bright, Peter (2016年9月22日). “TypeScript, Microsoft’s JavaScript for big applications, reaches version 2.0”. Ars Technica. Condé Nast. . September 22, 2016閲覧.
- ↑ Daniel Rosenwasser (2017年3月27日). “TypeScript’s New Release Cadence”. . 2017閲覧.
- ↑ Anders Hejlsberg (2012年10月5日). “What is TypeScript and why with Anders Hejlsberg”. www.hanselminutes.com. . 2014閲覧.
- ↑ S. Somasegar (2012年10月1日). “TypeScript: JavaScript Development at Application Scale”. msdn.com. . 2013閲覧.
- ↑ http://techcrunch.com/2012/10/01/microsoft-previews-new-javascript-like-programming-language-typescript/
- ↑ “Angular 2”. angular.io. . 2016閲覧.
- ↑ “Welcome to TypeScript”. typescriptlang.org. Microsoft. . 26 April 2015閲覧.
- ↑ “Consumption · TypeScript”. . 2017閲覧.
- ↑ TypeScript Language Specification p.24
- ↑ “borisyankov/DefinitelyTyped”. GitHub. . 26 April 2015閲覧.
- ↑ “niutech/typescript-compile”. GitHub. . 26 April 2015閲覧.
- ↑ The Most Intelligent Extension for Visual Studio :: ReSharper - C#, VB.NET, LINQ, ASP.NET, ASP.NET MVC, XAML, XML, JavaScript, HTML, build scripts. Best-of-breed tools for code refactoring, code quality analysis, code cleanup, navigation, code generation, unit testing, and code templates.
- ↑ https://babeljs.io/