TypeScriptについてまとめてみた


はじめに

JavaScript がとりあえずそのまま動くので、雰囲気で使ってしまいがちな TypeScript。初心者向けに基本的なことをまとめてみました。

TypeScript って何?

TypeScript はマイクロソフトが開発したプログラミング言語で、オープンソースでメンテナンスされています。分類としては altJS の一つ。JavaScript の不足している機能を改良した言語で、JavaScript に変換(コンパイル)して実行します。

CoffeeScript と何が違うの?

altJS といわれる言語には TypeScript のほかにも Ruby on Rails で使われている CoffeeScript などがあります。CoffeeScript とは何が違うのか、同じ処理を JavaScript(ECMAScript 5)、CoffeeScript、TypeScript で書いて比較してみます。

JavaScript(ECMAScript 5)

ECMAScript 5 までの JavaScript は class構文がないため、クラス定義に prototype を使う必要があり、オブジェクト指向プログラミングを行うには工夫が必要でした。

CoffeeScript

CoffeeScript だとクラス定義をすっきり書けますが、関数呼び出しやループが Ruby に近い書き方になっていて JavaScript とはだいぶ違っています。

TypeScript

TypeScript では JavaScript のコードをそのまま使えます。ループや条件分岐、関数呼び出しなどの JavaScript の構文はそのままで、それに追加して静的型付けやクラス宣言ができるようになっています。

JavaScript と何が違うの?

TypeScript を使う一番のメリットは、間違った型の代入を防げること(静的型付け)です。

JavaScript

JavaScript では変数の型を指定することができないため、数値として使っている変数(count)に文字列("Steve")を代入することができてしまいます。

TypeScript

TypeScript では、変数の型(number)を指定することができるので、数値として使っている変数(count)に文字列("Steve")を代入すると、コンパイルエラーとして指摘されます。

実は、このコロン(:)を使った静的型付けは JavaScript の仕様である ECMAScript 4 で提案されていたのですが、ECMAScript 4 はお蔵入りとなってしまいました……なので、JavaScript で型チェックを行いたい場合は TypeScript などの altJS が必要になるのです。

また、TypeScript 独自の型情報は JavaScript にコンパイルすると消えてしまいます(型消去)。

TypeScript(コンパイル前)

JavaScript(コンパイル後)

コンパイル後のコードを見ると、インタフェース(IMessage)は定義から綺麗さっぱり無くなっていて、コロン(:)の後ろにある型情報も無くなっています。

ECMAScript 6 と何が違うの?

class構文によるクラスの定義など TypeScript のいくつかの機能は ECMAScript 6(ECMAScript 2015)を先取りしたものです。TypeScript から JavaScript へのコンパイル時にはターゲットとして ECMAScript 3、5、6(2015)、2016、2017 が指定できて、それぞれ変換結果が異なります。

TypeScript

JavaScript(ECMAScript 5 をターゲットにしてコンパイルした結果)

JavaScript(ECMAScript 6 をターゲットにしてコンパイルした結果)

ターゲットを変えてコンパイルすると、型消去が行われている点は同じなのですが、class構文や letconst、アロー構文、テンプレートリテラルなど ECMAScript 6 標準の機能の変換の有無で違いが出ています。また ECMAScript 5 では thislet で定義された変数のスコープを配慮して変数名が変更されていることもわかります。

ECMAScript 6 の機能に加えて静的型付けなどが使えて、ECMAScript 5 しか対応していないブラウザ向けにも変換できるのが TypeScript ということですね。

動かしてみる

簡単に実行するには TypeScript Playground を使ってブラウザで確認できます。
ローカルで実行する場合は npm で tsc コマンドをインストールして TypeScript のファイルを JavaScript に変換(コンパイル)できます。

統合開発環境としては Visual Studio Code が便利です。

参考

※ DACはエンジニアを募集しています! 興味のある人はバナー(↓)からどうぞ


DACエンジニア採用情報

  関連記事

no image
gulp.jsで広告タグの開発環境を整える

SEOの観点から、サイト表示速度の高速化のためJavaScriptファイルから不用な空白や改行、 コメントを除去したりやローカル変数名を短縮するminifyが奨励されていますが、 これはタスクランナーのgulp.jsとプラグインを使って自動化する事が可能です。 ※gulpの基本的な使い方については下 …

no image
Polymer on Rails

Web Componentsをご存知だろうか。これが普及すればWebの開発は画期的に変わるだろう。 説明すると長くなるので、LIGさんのにその辺はお任せして。(この記事読んでください。) 簡単に言えば、下記にあるような新たに提案されたブラウザ向けAPIの総称。 Custom Elements, 説明 …

【未経験からのRuby on Rails – 第4回】Railsアプリケーション開発をしよう! 〜開発の準備編〜

こんにちは。新卒のmatsuariです。 Rubyについてまだまだ知るべきことはたくさんありますが、とにかく早くアプリを作りたい! ということで、今回はアプリ開発の準備に取り掛かっていきます。 Rubyはアプリを作成しながら、同時に学んでいきたいと思います。 Railsアプリケーション開発の準備《 …

GoogleスプレッドシートからTreasureDataへデータを取り込む

AudienceOneの開発を担当しています。skryoです。 またまたTreasureDataネタですが、今回はGoogleスプレッドシートからGoogleAppsScriptを使ってTreasureDataへデータを取り込む手順を紹介したいと思います。 なぜ? Googleスプレッドシート上でマ …

【未経験からのRuby on Rails – 第3回】変数と定数

こんにちは。新卒1年目のmatsuariです。 今回はRubyに限らずプログラミングを学ぶ上で非常に重要となる「変数と定数」について、ご紹介していきます。 変数とは・・・ オブジェクトを一時的に格納しておく箱で、オブジェクトを識別するために利用します。 言葉だけでは理解が難しいかと思いますので、まず …

ナイーブベイズで羽生さんと羽生くんを分類してみた

はじめに こんにちは。システム開発部の中村です。 機械学習についての理解を促進するため、 データから分類モデルを自動で構築する古典的な方法である、 ナイーブベイズ分類器を実装してみました。 最近はCloudVisionAPIなど専ら画像解析が流行っていますが、 自分のような初学者には敷居が高そうだっ …

Scala番外編「Boxに保存したファイルをBox APIを使ってダウンロードしよう!」

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 Box APIを使う背景・目的 DACはメディアレップです メディアレップとは、インタ …

no image
【未経験からのRuby on Rails – 第1回】楽しく書けるプログラミング言語 “Ruby” とは

こんにちは、はじめまして。新卒1年目のmatsuari(女子)です。 この度、Rubyの勉強を始めることになりまして、 まずはたくさんあるプログラミング言語の中で、なぜ自分がRubyを学ぶのか? しっかりと把握した上で学習に取り組んでいきたいと考え、『Rubyとは何か?』調べました。 超基礎的なこと …