メインコンテンツまでスキップ

noPropertyAccessFromIndexSignature

noPropertyAccessFromIndexSignatureはインデックス型のプロパティ参照に[]を必須にするコンパイラオプションです。

  • デフォルト: false
  • 追加されたバージョン: 4.2

解説

noUncheckedIndexedAccessと同様にインデックス型を持つオブジェクトに対する型評価です。インデックス型に対するアクセスをインデックス記法に強制します。

ドット記法とインデックス記法についてですが、次のようにあるオブジェクトがあるとしてドット(.)でプロパティアクセスをしているものがドット記法、ブラケット([])でアクセスをしているものがインデックス記法です。

ts
type SystemTerms = {
en: string;
[key: string]: string;
};
 
const butterfly: SystemTerms = {
en: "Butterfly",
fr: "Papillon",
it: "Farfalla",
es: "Mariposa",
};
 
// dot syntax
butterfly.en;
// indexed syntax
butterfly["en"];
ts
type SystemTerms = {
en: string;
[key: string]: string;
};
 
const butterfly: SystemTerms = {
en: "Butterfly",
fr: "Papillon",
it: "Farfalla",
es: "Mariposa",
};
 
// dot syntax
butterfly.en;
// indexed syntax
butterfly["en"];

SystemTermsnoUncheckedIndexedAccessにて登場した型と同じものでシステムにおける単語、用語のうち英語は担保し他言語の存在は曖昧なものにしています。

ts
console.log(butterfly.fr);
"Papillon"
ts
console.log(butterfly.fr);
"Papillon"

存在が不確かなプロパティへのアクセスについて、ドット記法でアクセスするときに、このオプションを有効にすると次のようなエラーが発生します。

ts
console.log(butterfly.fr);
Property 'fr' comes from an index signature, so it must be accessed with ['fr'].4111Property 'fr' comes from an index signature, so it must be accessed with ['fr'].
ts
console.log(butterfly.fr);
Property 'fr' comes from an index signature, so it must be accessed with ['fr'].4111Property 'fr' comes from an index signature, so it must be accessed with ['fr'].

このようにインデックス型へのドット記法でのアクセスが禁止されます。

  • 質問する ─ 読んでも分からなかったこと、TypeScriptで分からないこと、お気軽にGitHubまで🙂
  • 問題を報告する ─ 文章やサンプルコードなどの誤植はお知らせください。