generated at
noPropertyAccessFromIndexSignature
index signatureで定義した型は、 ['piyo'] という形式でアクセスすることを強制する
.piyo という形式でアクセスするとerrorになる




以下の2つの宣言に対し、アクセス時に区別できる
①defined propertyとして定義したもの
index signatureとして定義したもの
e.g. [key: string]: string;
例えば以下のように定義した際に
ts
type Hoge = { speed: "fast" | "medium" | "slow"; // ① [key: string]: string; // ② }
以下のような挙動になる
ts
hoge.speed // ok hoge.username // error。  noPropertyAccessFromIndexSignature:faseだとokになる hoge['username'] // ok
つまり、index signatureで定義したものに対しては
.piyo という形式でアクセスすることが禁止される
['piyo'] という形式でアクセスしないといけない


何が嬉しいのか?
propertyにアクセスしている構文を見た時に、それが
defined propertyなのか
を見た目で判断できるようになった
.piyo の形式で書かれている」ということは、「そのproperty piyo は必ず存在する」と判断できる
基本的に安全なアクセスだということ
['piyo'] の形式で書かれている」ということは、「もしかしたらそのpropertyは存在しない」と判断できる
安全ではないアクセスだよというのを、構文を見るだけで判断できる
index signatureは、後から任意の項目を追加できるので、そのpropertyの中身が必ずあることを保証できない
hoge['piyo'] の中身が本当に定義されているかどうか、型レベルで保証できない
理想的には、 string|undefined になるのが安全ではある
これは、noUncheckedIndexedAccessを有効すると実現できるmrsekut

つまり、 noPropertyAccessFromIndexSignature を有効にしたところで何も型安全にはなっていないmrsekut
ただ、利用者が「安全なのか、安全でないのか」を、構文を見るだけで判断できるようになった、ということ



参考