コードが次のものと同等であることを理解していると仮定します。
var a, b
b = a + 10
a = 10
alert(b.toString())
これは次と同等です。
var a = undefined, b = undefined
b = a + 10
a = 10
alert(b.toString())
許可する必要がある理由は、未定義が、割り当てて読み取ることができる変数の有効な値であるためです。
この機能が役立つさまざまなユースケースがあります。たとえば、typescript で使用されるモジュール パターン:
module x{
export var foo;
}
この事実を利用する JavaScript コードを生成します。
var x;
(function (x) {
x.foo;
})(x || (x = {})); //x was never assigned but used in "x ||" part
これは、JavaScript の後方互換性のために TypeScript に残されています (便利であることは言うまでもありません)。
これは純粋に TypeScript のユースケースです。おそらく、 undefined を関数呼び出しに渡したいと思うでしょう (これは有効な typescript です):
var a:number = undefined; // same as simply "var a"
console.log(a);
TypeScript 開発者は、基礎となる JavaScript 言語の機能を必要としていると想定されています。
これは、割り当て前の読み取りが無効な言語 (C# など) には当てはまりません。C# では、割り当てられていない変数には意味がありません。JavaScript ではそうです。したがって、TypeScriptはこれを許可する必要があります。