noPropertyAccessFromIndexSignature
.piyo
という形式でアクセスするとerrorになる
以下の2つの宣言に対し、アクセス時に区別できる
①defined propertyとして定義したもの
e.g. [key: string]: string;
例えば以下のように定義した際に
tstype Hoge = {
speed: "fast" | "medium" | "slow"; // ①
[key: string]: string; // ②
}
以下のような挙動になる
tshoge.speed // ok
hoge.username // error。 noPropertyAccessFromIndexSignature:faseだとokになる
hoge['username'] // ok
.piyo
という形式でアクセスすることが禁止される
['piyo']
という形式でアクセスしないといけない
何が嬉しいのか?
propertyにアクセスしている構文を見た時に、それが
defined propertyなのか
を見た目で判断できるようになった
「 .piyo
の形式で書かれている」ということは、「そのproperty piyo
は必ず存在する」と判断できる
基本的に安全なアクセスだということ
「 ['piyo']
の形式で書かれている」ということは、「もしかしたらそのpropertyは存在しない」と判断できる
安全ではないアクセスだよというのを、構文を見るだけで判断できる
hoge['piyo']
の中身が本当に定義されているかどうか、型レベルで保証できない
理想的には、 string|undefined
になるのが安全ではある
つまり、
noPropertyAccessFromIndexSignature
を有効にしたところで何も型安全にはなっていない

ただ、利用者が「安全なのか、安全でないのか」を、構文を見るだけで判断できるようになった、ということ
参考