結論
以下の二つの仕様が理由である。
ブラケット記法は動的にプロパティにアクセスできる
ブラケット記法は[]
の内部に指定されたキーを元に、「実行時」に指定されたキーと一致するプロパティがあれば呼び出すという仕組みなので、コーディング時に対象のプロパティにアクセスできなくても呼び出せる。
private修飾子はTypeScript独自の仕様であり、JavaScriptのPrivateとは別物である
private修飾子はTypeScript独自の記法であり、JavaScriptの仕様であるブラケット記法に対して、呼び出せないようにするなどの動作は行えない。
※ドット記法の場合、元々存在しうるプロパティにしかアクセスできないので、private修飾子で候補自体が絞り込まれても、ドット記法自体に対して呼び出せないようにするなどの動作を行っているわけではない。
おまけ JavaScriptのPrivate
JavaScriptのPrivateは、ドット記法でのみ呼び出せるようになっており、キーの一致不一致にかかわらず、ブラケット記法では呼び出せない。