![]() | この項目「TypeScript」は途中まで翻訳されたものです。(原文:英語版 "TypeScript" 00:12, 18 March 2016 (UTC)) 翻訳作業に協力して下さる方を求めています。ノートページや履歴、翻訳のガイドラインも参照してください。要約欄への翻訳情報の記入をお忘れなく。(2016年3月) |
![]() | |
パラダイム | マルチパラダイム :スクリプト、オブジェクト指向、構造化、命令型、関数型、ジェネリック |
---|---|
登場時期 | 2012年10月1日 (2012-10-01)[1] |
設計者 | マイクロソフト |
開発者 | マイクロソフト |
最新リリース | 5.8.2[2] ![]() |
影響を受けた言語 | JavaScript,Java,C# |
影響を与えた言語 | AtScript |
ライセンス | Apache License 2.0 |
ウェブサイト | www![]() |
拡張子 | .ts |
テンプレートを表示 |
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]。
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]。
2018年7月30日、TypeScript 3.0がリリースされ、残りのパラメーターと展開式のタプル、タプル型を持つ残りのパラメーター、ジェネリックな残りのパラメーターなど、多くの言語機能が追加された[24]。
2020年8月20日、TypeScript4.0がリリースされ、4.0では重大な変更はされていないが、カスタムJSXファクトリやVariadic Tuple型などの言語機能が追加された[25]。
2022年11月15日、TypeScript4.9がリリースされ、新たにsatisfies演算子が導入され、ECMAScriptの次期機能auto-accessorsがサポートされた[26]。
2023年3月16日、TypeScript 5.0がリリースされ、decoratorsがサポートされた。[27]
2025年3月11日、TypeScriptのリードアーキテクトであるアンダース・ヘルスバーグはTypeScriptのコンパイラと各種ツール群をGoに移植する「Project Corsa」を実施中であることを発表した[28][29]。ヘルスバーグはGoにネイティブ移植することでコンパイラの処理速度が約10倍に高速化し、メモリ使用量も大幅に削減されることを示した[28]。Goを採用した理由について、ヘルスバーグは既存のTypeScriptで書かれたコンパイラとの構造的な互換性を重視したこと、メモリ管理が容易であること、複雑なグラフ処理を効率的に処理できることなどの技術要件によるものだと述べている[30]。従来のJavaScriptベースの実装はTypeScript 6.xとして開発し、ネイティブ実装は既存のTypeScriptと十分な互換性を持った時点でTypeScript 7.0としてリリースされる計画である[31]。
TypeScriptはマイクロソフトやその外部の顧客たちの間で、JavaScriptで大規模アプリケーション開発をする上での欠点を補うために作られた[32]。複雑なJavaScriptコードを扱うのは困難なことから、JavaScript言語の中でコンポーネント群を開発するのを容易にするための自作ツールが必要になった[33]。
TypeScriptの開発者は、標準との互換性や、クロスプラットフォームサポートを壊さないで済む解決策を模索した。現在のECMAScript言語標準が将来的にクラスベースオブジェクト指向をサポートする提案があることを踏まえ、TypeScriptはその提案に基づくことになった。これにより、その提案に基づいたスーパーセットであり、幾つかの点で言語の文法を拡張したJavaScriptコンパイラへと至ることとなった。このコンパイラが、言語を拡張した部分を一般的な JavaScriptへと変換する仕組みである。この意味ではTypeScriptはECMAScript 2015において期待されている機能を先取りするようなものであるともいえる。ECMAScriptの提案にないがTypeScriptに独自に搭載された機能として、静的言語解析を可能にする静的型付け機能(使用するかどうかは選択可能)がある。これは諸ツールや統合開発環境(IDE)によるサポートを容易にする。
TypeScriptはJavaScript (ECMAScript 5) に次のような言語機能の拡張を加えたものである。
ECMAScript 6由来
ECMAScript 7由来
独自
構文的には、静的型付けやクラス、継承、インタフェースのようなオブジェクト指向、名前空間などの機能を追加する、ECMA-262 言語標準のマイクロソフトによる実装であるJScript.NET と TypeScript はよく似ている。
TypeScript はECMAScript 2015の厳密なスーパーセットであり、ECMAScript 2015はECMAScript 5(一般的にJavaScriptと呼ばれているもの)のスーパーセットである[35]。従って、JavaScriptプログラムは有効なTypeScriptプログラムでもあるので、TypeScriptプログラムはJavaScriptを境目なしに利用できる。
デフォルト設定の場合、コンパイラはECMAScript 3を出力するが、オプションによりECMAScript 3から最新のECMAScriptまでの間で出力対象を選択することができる。
TypeScriptでは、既存のJavaScriptコードを使うことができる。つまり、人気のあるJavaScriptライブラリを取り入れることができ、他のJavaScriptからTypeScriptで作られたコードを呼ぶこともできる[36]。これらの外部ライブラリに対する型宣言は、DefinitelyTyped(後述)に収録されていればnpmを用いて簡単にインストールすることができる[37]。
TypeScriptはコンパイル時における型検査を可能にするために、型アノテーションによる静的型付けの仕組みを提供している。この仕組みの利用は任意なので、この仕組みを無視して普通のJavaScriptの動的型付けを使うこともできる。
functionadd(left:number,right:number):number{returnleft+right;}
プリミティブ型のためのアノテーションはnumber
、boolean
、string
である。弱い型付けあるいは動的型付けにする場合は、any
型を用いる。
既にJavaScriptにコンパイルされた型を使うTypeScriptスクリプトから型情報を利用できるようにするために、型アノテーションは別個の「宣言ファイル」に外出しすることが出来る。アノテーションは、Node.jsやjQueryに対して行われたように、既存のJavaScriptライブラリに対しても宣言できる。
型が与えられていない場合、TypeScriptコンパイラは型を推論するために型推論を使う。例えば、上のコードにおけるadd
メソッドは、もし戻り値型が何も与えられていなかったとしても、number
型を返すと推論される。これは引数left
とright
がnumber
型であること、および「二つのnumber
型を加算した結果は常にnumber
型である」というコンパイラ側の知識に基づいている。しかし、明示的に戻り値型を指定しておけば、コンパイラがその正しさを検証してくれる。
宣言の不足により型推論が不可能な場合、動的なany
型がデフォルトで使われる。any
型の値に対する操作は、JavaScriptと同様の操作をサポートしているので、any
型に対する操作については最低限の静的型検査が行われるだけである[38]。
TypeScriptをコンパイルするとき、「型宣言ファイル」(拡張子.d.ts
)を生成するオプションがある。この型宣言ファイルは、コンパイルされてできたJavaScript内のコンポーネントへのインタフェースの役割を果たす。コンパイラは、型宣言ファイルの作成過程で、関数やメソッドのコードの中身はすべて除去し、出力される型のシグネチャだけを残す。その結果として出来た型宣言ファイルには、出力されたJavaScriptライブラリまたはモジュールの仮想的なTypeScript型が記述してあり、第三者がTypeScriptを書くとき、この型宣言ファイルを読み込んで使うことが出来る。
この型宣言ファイルの概念は、C言語やC++におけるヘッダファイルとよく似ている。
declaremodulearithmetics{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[39]やTypings Registryに公開されている。リポジトリから型宣言ファイルを検索しインストールするのを補助するためにtypings
というコマンドラインユーティリティが提供されている。
TypeScriptはコンパイルターゲットとして様々な環境をサポートしている。そのためそれらに対応した多様なモジュール/ローダーシステムに対応している。tsconfigのmodule
属性を用いることで ES6, ES2020, node ESM, CommonJS, AMD, UMD に適合したトランスパイルをおこなうことができる[40]。
TypeScriptコンパイラtsc
自体もTypeScriptで作成されている(セルフホスティング)。これは通常のJavaScript にコンパイルでき、任意のホスト上のJavaScriptエンジン(たとえばブラウザなど)上で実行できる。ライセンスはApache License 2.0である。コンパイラ・パッケージはコンパイラを実行出来るスクリプトホストに同梱されてくる。Node.js等と共にコンパイラ・パッケージとして配布される場合もある。
また、JavaScriptで書かれたクライアントサイドのコンパイラのアルファ版もある。これはページロード中にTypeScriptコードを実行する[41]。
TypeScriptで書いたコードをブラウザ上で実行するにはコンパイルが必要。
tsc--strict-tes5*.ts
以下の統合開発環境 (IDE) やテキストエディタがTypeScriptに対応している。
{{cite web}}
:Cite webテンプレートでは|access-date=
引数が必須です。 (説明)module
Sets the module system for the program." TypeScript.Intro to the TSConfig Reference. 2023-02-20閲覧.マイクロソフトのAPIとフレームワーク | |
---|---|
グラフィック | |
オーディオ | |
マルチメディア | |
ウェブ | |
データアクセス | |
ネットワーク | |
コミュニケーション | |
管理 | |
コンポーネントモデル | |
ライブラリ | |
デバイスドライバ | |
セキュリティ | |
.NET | |
ソフトウェアファクトリー | |
IPC | |
アクセシビリティ | |
テキストと多言語 サポート | |
人工知能 | |
人物 |
| ||||||||
---|---|---|---|---|---|---|---|---|---|
ソフトウェア |
| ||||||||
開発言語 | |||||||||
技術 | |||||||||
オンラインサービス |
| ||||||||
ゲーム | |||||||||
ハードウェア | |||||||||
教育と認識 | |||||||||
ライセンス | |||||||||
会議 | |||||||||
批判 | |||||||||
訴訟 | |||||||||
買収企業 | |||||||||
キャラクター | |||||||||
関連人物 | |||||||||
部門 | |||||||||