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