MicrosoftのDaniel RosenwasserがTypeScript 2.0のベータリリースを発表した。このリリースによって、当言語に多くの新機能がもたらされる。null非許容型や、型の制御フロー解析、そして判別共用体などである。
null非許容型はJavaScriptで最も一般的なバグの原因であるnull
とundefined
を解決しようとするものであるとRosenwasserは言う。null非許容型は変数がoption型として宣言されていなければ、null
を代入することを禁じるものだ。
let foo1: string = null; // エラー!
let foo2: string | null = null; // Option型
上で示される通り、option型はTypeScript 2.0のもう一つの新機能であるunion型として記述される。省略可能な引数とプロパティは自動的にoption型に属するものと推論される。option型を使うときには!
演算子を用いることもできるし、型ガードを用いることもできる。
let s: string | undefined = "string"; // 正常
if (s) {
f(s);
}
let upperCase = s!.toUpperCase(); // 正常
let lowerCase = foo2.toLowerCase(); // エラー
TypeScript 2.0におけるnull非許容型は、--strictNullChecks
フラグを使うことにより有効化される。
TypeScript 2.0では、ローカル変数と引数に対して制御フローに基づいた型の解析も可能になる。これはTypeScriptの型解析が大きく改善することを意味している。代入による影響が反映され、return
やbreak
といった制御フローの構成物を含められるように、2.0以前の型解析が拡張される。
TypeScript 2.0の新機能には、privateおよびprotectedコンストラクターもある。private
やprotected
のキーワードを使ってコンストラクターを宣言できる。さらに、抽象プロパティも定義できるようになった。サブクラスに対し、抽象プロパティのアクセサー定義を強制する。
abstract class A {
abstract p;
}
class B extends A {
get p() {...}
set p(v) {...}
}
上記のnull
やundefined
型に加え、TypeScript 2.0はnever
型を新しく導入する。この型が表すのは、決してreturnしない関数のように決して存在しない値や、決してtrueにならないガード内の変数などの型である。
// never型を返す関数は決して末尾に到達してはならない
function error(message: string): never {
throw new Error(message);
}
TypeScript 2.0には他にも多くの新機能がある。読み取り専用のプロパティとインデックスシグネチャ、これまで暗黙的だった関数のthis
引数に対する型指定、モジュール解決の強化、などなど。
TypeScript 2.0ベータをインストールするには、Visual Studio 2015向けのものをダウンロードするか(VS 2015 Update 3が必要)、または、npm install -g typescript@beta
を実行すること。