メインコンテンツへスキップ

naming-convention

コードベース全体で一貫した命名規則を適用します。

💭

このルールには以下が必要です。 型情報 を実行するには。

命名規則を適用することで、コードベースの一貫性を維持し、変数名を考える際のオーバーヘッドを削減できます。さらに、適切に設計されたスタイルガイドは、すべてのプライベートプロパティを_で始め、グローバルレベルの定数をUPPER_CASEで記述するなど、意図を伝えるのに役立ちます。

注記

このルールは *機能凍結* です。新しいオプションなどの新機能は追加されません。既存の機能範囲の不具合やドキュメントの修正、新しいTypeScriptバージョンのサポートは引き続き行われます。

命名や並べ替えの規則を適用するスタイルルールは、ますます分かりにくい機能が要求されるにつれて、理解できないほど複雑になります。このルールは、typescript-eslintプロジェクトが維持できる範囲の限界に達しました。eslint-plugin: 命名と並べ替えのスタイルルールを機能凍結 を参照して、詳細を確認してください。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/naming-convention": "error"
}
};

Playgroundでこのルールを試してみてください ↗

このルールを使用すると、詳細なセレクターを使用してきめ細かいスタイルガイドを作成することにより、任意の識別子に対して規則を適用できます。

注記

このルールは、下記に詳述されている特定のケースでのみ型情報が必要です。

オプション

このルールはオブジェクトの配列を受け入れます。各オブジェクトは異なる命名規則を記述します。各プロパティについては以下で詳しく説明します。図解された例については、以下の例セクションを参照してください。

type Options = {
// format options
format:
| (
| 'camelCase'
| 'strictCamelCase'
| 'PascalCase'
| 'StrictPascalCase'
| 'snake_case'
| 'UPPER_CASE'
)[]
| null;
custom?: {
regex: string;
match: boolean;
};
leadingUnderscore?:
| 'forbid'
| 'require'
| 'requireDouble'
| 'allow'
| 'allowDouble'
| 'allowSingleOrDouble';
trailingUnderscore?:
| 'forbid'
| 'require'
| 'requireDouble'
| 'allow'
| 'allowDouble'
| 'allowSingleOrDouble';
prefix?: string[];
suffix?: string[];

// selector options
selector: Selector | Selector[];
filter?:
| string
| {
regex: string;
match: boolean;
};
// the allowed values for these are dependent on the selector - see below
modifiers?: Modifiers<Selector>[];
types?: Types<Selector>[];
}[];

// the default config is similar to ESLint's camelcase rule but more strict
const defaultOptions: Options = [
{
selector: 'default',
format: ['camelCase'],
leadingUnderscore: 'allow',
trailingUnderscore: 'allow',
},

{
selector: 'import',
format: ['camelCase', 'PascalCase'],
},

{
selector: 'variable',
format: ['camelCase', 'UPPER_CASE'],
leadingUnderscore: 'allow',
trailingUnderscore: 'allow',
},

{
selector: 'typeLike',
format: ['PascalCase'],
},
];

フォーマットオプション

すべてのセレクターは、同じフォーマットオプションのセットを持つことができます。各セレクターの適用方法については、「このルールはどのように名前の形式を評価しますか?」を参照してください。

format

formatオプションは、識別子に許可される形式を定義します。このオプションは次の値の配列を受け入れ、識別子はそれらのいずれかに一致できます。

  • camelCase - 標準のcamelCase形式 - 文字間にアンダースコアは許可されず、連続した大文字は許可されます(つまり、myIDmyIdの両方が有効です)。
  • PascalCase - camelCaseと同じですが、最初の文字は大文字でなければなりません。
  • snake_case - 標準のsnake_case形式 - すべての文字は小文字でなければならず、アンダースコアは許可されます。
  • strictCamelCase - camelCaseと同じですが、連続した大文字は許可されません(つまり、myIdは有効ですが、myIDは無効です)。
  • StrictPascalCase - strictCamelCaseと同じですが、最初の文字は大文字でなければなりません。
  • UPPER_CASE - snake_caseと同じですが、すべての文字は大文字でなければなりません。

配列の代わりに、nullを渡すこともできます。これは「このセレクターはフォーマットチェックされません」という意味です。これは、グループセレクターを適用した後、特定のセレクターに対して特定の形式を適用しないようにする場合に役立ちます。

custom

customオプションは、識別子が一致する必要がある(または一致してはならない)カスタム正規表現を定義します。このオプションを使用すると、識別子に対するよりきめ細かい制御が可能になり、特定のパターンや部分文字列を禁止(または強制)できます。次のプロパティを持つオブジェクトを受け入れます。

  • match - 識別子がregex一致する必要がある場合はtrue、一致してはならない場合はfalse。
  • regex - RegExpに渡されて新しい正規表現を作成する文字列: new RegExp(regex)

filter

filterオプションはcustomと同様に動作し、同じ形状のオブジェクトを受け入れますが、残りの構成を識別子に適用するかどうかを制御します。

これを使用して、特定の構成から特定の識別子を含めたり除外したりできます。

次のプロパティを持つオブジェクトを受け入れます。

  • match - 識別子がregex一致する必要がある場合はtrue、一致してはならない場合はfalse。
  • regex - RegExpに渡されて新しい正規表現を作成する文字列: new RegExp(regex)

あるいは、filterは正規表現を受け入れます(new RegExp(filter)に渡されるものすべて)。この場合、regexとmatch: trueを持つオブジェクトを渡したかのように扱われます。

leadingUnderscore / trailingUnderscore

leadingUnderscore / trailingUnderscoreオプションは、先頭/末尾のアンダースコアが有効と見なされるかどうかを制御します。次のいずれかの値を受け入れます。

  • allow - 単一の先頭/末尾のアンダースコアの存在は明示的に強制されません。
  • allowDouble - 2つの先頭/末尾のアンダースコアの存在は明示的に強制されません。
  • allowSingleOrDouble - 単一または2つの先頭/末尾のアンダースコアの存在は明示的に強制されません。
  • forbid - 先頭/末尾のアンダースコアはまったく許可されません。
  • require - 単一の先頭/末尾のアンダースコアを含める必要があります。
  • requireDouble - 2つの先頭/末尾のアンダースコアを含める必要があります。

prefix / suffix

prefix / suffixオプションは、識別子に存在する必要がある接頭辞/接尾辞文字列を制御します。文字列の配列を受け付けます。

これらのオプションが指定されている場合、識別子は指定された値のいずれかで始まる必要があります。たとえば、{ prefix: ['Class', 'IFace', 'Type'] }を指定した場合、ClassBarIFaceFooTypeBazという名前は有効ですが、接頭辞を含まないBangという名前は無効です。

注記: 上記で説明されているように、形式の検証の前に接頭辞はトリミングされるため、isという接頭辞を使用してisEnabledなどの変数を許可するには、PascalCaseを使用する必要があります。

セレクターオプション

  • selectorを使用すると、対象とする識別子の種類を指定できます。
    • 1つ以上のセレクター、または1つ以上のセレクターに適用されるオプションブロックを定義するセレクターの配列を受け付けます。
    • たとえば、{ selector: ['function', 'variable'] }を指定した場合、変数ノードと関数ノードに同じオプションが適用されます。
    • 許可されるセレクター、修飾子、および型で、許可されるセレクターの完全なリストを参照してください。
  • modifiersを使用すると、アクセシビリティ(#private/private/protected/public)やstaticかどうかなど、より詳細に適用する修飾子を指定できます。
    • 名前は、すべての修飾子と一致する必要があります。
    • たとえば、{ modifiers: ['private','readonly','static'] }を指定した場合、private static readonlyであるもののみが一致し、privateのみのものでは一致しません。
    • 次のmodifiersが許可されます。
      • abstractoverrideprivateprotectedreadonlystatic - 指定された修飾子で明示的に宣言されたメンバーと一致します。
      • async - asyncキーワードで非同期であるメソッド、関数、または関数変数と一致します(例:asyncキーワードを使用せずにPromiseを返す関数とは一致しません)。
      • const - constとして宣言された変数と一致します(const x = 1)。
      • destructured - オブジェクトのデストラクチャリングパターンで宣言された変数と一致します(const {x, z = 2})。
        • 名前が変更されたデストラクチャリングプロパティ(const {x: y, a: b = 2})とは一致しません。
      • exported - モジュールからエクスポートされたものと一致します。
      • global - トップレベルスコープで宣言された変数/関数と一致します。
      • #private - プライベート識別子(#で始まる識別子)を持つメンバーと一致します。
      • public - 明示的にpublicとして宣言されているか、可視性修飾子がない(つまり、暗黙的にpublic)メンバーと一致します。
      • requiresQuotes - 有効な識別子ではないため、引用符が必要な名前と一致します(つまり、スペース、ダッシュなどが含まれています)。
      • unused - 使用されていないものと一致します。
  • typesを使用すると、一致させる型を指定できます。このオプションは、単純なプリミティブ型のみをサポートします(arraybooleanfunctionnumberstring)。
    • 名前は、型のいずれか1つと一致する必要があります。
    • 注記 - このオプションを使用するには、型情報を使用してlintを実行する必要があります。
    • たとえば、boolean変数には動詞の接頭辞を付けることを強制できます。
    • 次のtypesが許可されます。
      • arrayは、Array<unknown> | null | undefinedに割り当て可能な型と一致します。
      • booleanは、boolean | null | undefinedに割り当て可能な型と一致します。
      • functionは、Function | null | undefinedに割り当て可能な型と一致します。
      • numberは、number | null | undefinedに割り当て可能な型と一致します。
      • stringは、string | null | undefinedに割り当て可能な型と一致します。

セレクターの順序は関係ありません。実装では、最も具体的なセレクターから最も具体的なセレクターになるようにセレクターが自動的にソートされます。名前と一致するものが見つかるまで、その順序でセレクターのチェックを続けます。"ルールがセレクターを自動的にソートする方法"を参照してください。

許可されるセレクター、修飾子、および型

セレクターには、個々のセレクターとグループ化されたセレクターの2つの種類があります。

個々のセレクター

個々のセレクターは、特定の、明確に定義された集合と一致します。個々のセレクター間には重複はありません。

  • classicAccessor - アクセサーと一致します。getset構文に接続されたメソッドを参照します。
    • 許可されるmodifiers: abstractoverrideprivateprotectedpublicrequiresQuotesstatic
    • 許可されるtypes: arraybooleanfunctionnumberstring
  • autoAccessor - オートアクセサーと一致します。オートアクセサーは、単にaccessorキーワードで始まるクラスフィールドです。
    • 許可されるmodifiers: abstractoverrideprivateprotectedpublicrequiresQuotesstatic
    • 許可されるtypes: arraybooleanfunctionnumberstring
  • class - クラス宣言と一致します。
    • 許可されるmodifiers: abstractexportedunused
    • 許可されるtypes: なし。
  • classMethod - クラスメソッドと一致します。直接的な関数式またはアロー関数式の値を持つプロパティとも一致します。アクセサーとは一致しません。
    • 許可されるmodifiers: abstractasyncoverride#privateprivateprotectedpublicrequiresQuotesstatic
    • 許可されるtypes: なし。
  • classProperty - クラスプロパティと一致します。直接的な関数式またはアロー関数式の値を持つプロパティとは一致しません。
    • 許可されるmodifiers: abstractoverride#privateprivateprotectedpublicreadonlyrequiresQuotesstatic
    • 許可されるtypes: arraybooleanfunctionnumberstring
  • enum - enum宣言と一致します。
    • 許可されるmodifiers: exportedunused
    • 許可されるtypes: なし。
  • enumMember - enumメンバーと一致します。
    • 許可されるmodifiers: requiresQuotes
    • 許可されるtypes: なし。
  • function - 名前付き関数宣言または名前付き関数式と一致します。
    • 許可されるmodifiers: asyncexportedglobalunused
    • 許可されるtypes: なし。
  • import - 名前空間インポートとデフォルトインポートと一致します(つまり、名前付きインポートとは一致しません)。
    • 許可されるmodifiers: defaultnamespace
    • 許可されるtypes: なし。
  • interface - インターフェース宣言と一致します。
    • 許可されるmodifiers: exportedunused
    • 許可されるtypes: なし。
  • objectLiteralMethod - オブジェクトリテラルメソッドと一致します。直接的な関数式またはアロー関数式の値を持つプロパティとも一致します。アクセサーとは一致しません。
    • 許可されるmodifiers: asyncpublicrequiresQuotes
    • 許可されるtypes: なし。
  • objectLiteralProperty - オブジェクトリテラルプロパティと一致します。直接的な関数式またはアロー関数式の値を持つプロパティとは一致しません。
    • 許可されるmodifiers: publicrequiresQuotes
    • 許可されるtypes: arraybooleanfunctionnumberstring
  • parameter - 関数パラメーターと一致します。パラメータープロパティとは一致しません。
    • 許可されるmodifiers: destructuredunused
    • 許可されるtypes: arraybooleanfunctionnumberstring
  • parameterProperty - パラメータープロパティと一致します。
    • 許可されるmodifiers: privateprotectedpublicreadonly
    • 許可されるtypes: arraybooleanfunctionnumberstring
  • typeAlias - 型エイリアス宣言と一致します。
    • 許可されるmodifiers: exportedunused
    • 許可されるtypes: なし。
  • typeMethod - オブジェクト型のメソッドと一致します。直接的な関数式またはアロー関数式の値を持つプロパティとも一致します。アクセサーとは一致しません。
    • 許可されるmodifiers: publicrequiresQuotes
    • 許可されるtypes: なし。
  • typeParameter - ジェネリック型パラメーター宣言と一致します。
    • 許可されるmodifiers: unused
    • 許可されるtypes: なし。
  • typeProperty - オブジェクト型のプロパティと一致します。直接的な関数式またはアロー関数式の値を持つプロパティとは一致しません。
    • 許可されるmodifiers: publicreadonlyrequiresQuotes
    • 許可されるtypes: arraybooleanfunctionnumberstring
  • variable - const / let / var変数名と一致します。
    • 許可されるmodifiers: asyncconstdestructuredexportedglobalunused
    • 許可されるtypes: arraybooleanfunctionnumberstring
グループセレクター

グループセレクターは便宜上提供されており、本質的に個々のセレクターの集合をバンドルしています。

  • default - すべてと一致します。
    • 許可されるmodifiers: すべての修飾子。
    • 許可されるtypes: なし。
  • accessor - classicAccessorautoAccessorと同じと一致します。
    • 許可されるmodifiers: abstractoverrideprivateprotectedpublicrequiresQuotesstatic
    • 許可されるtypes: arraybooleanfunctionnumberstring
  • memberLike - classicAccessorautoAccessorenumMembermethodparameterPropertypropertyと同じと一致します。
    • 許可されるmodifiers: abstractasyncoverride#privateprivateprotectedpublicreadonlyrequiresQuotesstatic
    • 許可されるtypes: なし。
  • method - classMethodobjectLiteralMethodtypeMethodと同じと一致します。
    • 許可されるmodifiers: abstractasyncoverride#privateprivateprotectedpublicreadonlyrequiresQuotesstatic
    • 許可されるtypes: なし。
  • property - classPropertyobjectLiteralPropertytypePropertyと同じと一致します。
    • 許可されるmodifiers: abstractasyncoverride#privateprivateprotectedpublicreadonlyrequiresQuotesstatic
    • 許可されるtypes: arraybooleanfunctionnumberstring
  • typeLike - classenuminterfacetypeAliastypeParameterと同じと一致します。
    • 許可されるmodifiers: abstractunused
    • 許可されるtypes: なし。
  • variableLike - functionparametervariableと同じと一致します。
    • 許可されるmodifiers: asyncunused
    • 許可されるtypes: なし。

FAQ

これは大きなルールであり、多くのドキュメントがあります。試行錯誤によって人々がよく尋ねたり、理解したりするいくつかの明確化を示します。

ルールはどのようにセレクターを評価しますか?

各セレクターは、以下の方法でチェックされます。

  1. filterをチェックします。
    1. filterが省略されている場合→このステップをスキップします。
    2. 名前がfilterと一致する場合→このセレクターの評価を続けます。
    3. 名前がfilterと一致しない場合→このセレクターをスキップし、次のセレクターに進みます。
  2. selectorをチェックします。
    1. selectorが個々のセレクターの1つの場合→名前の型はその型である必要があります。
    2. selectorがグループセレクターの場合→名前の型はグループ化された型の1つである必要があります。
    3. selectorがセレクターの配列の場合→配列内の各セレクターについて上記を適用します。
  3. typesをチェックします。
    1. typesが省略されている場合→このステップをスキップします。
    2. 名前がtypesの中に型を持つ場合→このセレクタの評価を続けます。
    3. 名前がtypesの中に型を持たない場合→このセレクタをスキップし、次のセレクタに進みます。

名前が設定に合格するとみなされるのは、以下の場合です。

  1. 1つのセレクタにマッチし、そのセレクタのすべてのフォーマットチェックに合格する場合。
  2. どのセレクタにもマッチしない場合。

名前が設定に不合格とみなされるのは、1つのセレクタにマッチし、そのセレクタのフォーマットチェックに1つでも不合格の場合です。

ルールはどのように自動的にセレクタをソートしますか?

各識別子は、正確に1つのセレクタにマッチする必要があります。複数のグループセレクタにマッチする可能性がありますが、常に1つのセレクタのみです。これを踏まえると、基本的なソート順序は以下のようになります。

  1. 個別セレクタ
  2. グループ化されたセレクタ
  3. デフォルトセレクタ

これらのカテゴリのそれぞれの中で、提供されたセレクタオプションに基づいて、さらにソートが行われます。

  1. filterは、他のすべてよりも最優先されます。
  2. types
  3. modifiers
  4. その他すべて

例えば、以下の設定を提供した場合

[
/* 1 */ { selector: 'default', format: ['camelCase'] },
/* 2 */ { selector: 'variable', format: ['snake_case'] },
/* 3 */ { selector: 'variable', types: ['boolean'], format: ['UPPER_CASE'] },
/* 4 */ { selector: 'variableLike', format: ['PascalCase'] },
];

コードconst x = 1の場合、ルールはセレクタを3241の順に検証します。明確に説明すると

  • (3)は、typesを持ち、個別セレクタであるため、最初にテストされます。
  • (2)は、個別セレクタであるため、次にテストされます。
  • (4)は、グループ化されたセレクタであるため、次にテストされます。
  • (1)は、基本的なデフォルトセレクタであるため、最後にテストされます。

この順序が適用されますが、すべてのセレクタが名前に対して実行されるとは限りません。これは"ルールは名前のフォーマットをどのように評価しますか?"で説明されています。

ルールは名前のフォーマットをどのように評価しますか?

識別子のフォーマットがチェックされるときは、以下の順序でチェックされます。

  1. 先頭のアンダースコアの検証
  2. 末尾のアンダースコアの検証
  3. プレフィックスの検証
  4. サフィックスの検証
  5. カスタムの検証
  6. フォーマットの検証

ステップ1〜4では、識別子がオプションに一致する場合、一致する部分は削除されます。これは、プレフィックスやアンダースコアが原因で一致しなくなることを心配することなく、PascalCaseなどのフォーマットを適用できるようにするためです。

最後の注意として、このトリミングプロセスによって名前が空になった場合、すべてのformatにマッチするとみなされます。これが役立つ可能性のある例としては、すべての名前がTで始まる必要があるが、単一文字のT名も許可したいジェネリック型パラメータがあります。

説明を助けるためにいくつかの例を挙げます。

名前: _IMyInterface セレクタ

{
"leadingUnderscore": "require",
"prefix": ["I"],
"format": ["UPPER_CASE", "StrictPascalCase"]
}
  1. name = _IMyInterface
  2. 先頭のアンダースコアの検証
    1. 設定が提供される
    2. 名前をチェック→合格
    3. アンダースコアをトリム→name = IMyInterface
  3. 末尾のアンダースコアの検証
    1. 設定が提供されない→スキップ
  4. プレフィックスの検証
    1. 設定が提供される
    2. 名前をチェック→合格
    3. プレフィックスをトリム→name = MyInterface
  5. サフィックスの検証
    1. 設定が提供されない→スキップ
  6. カスタムの検証
    1. 設定が提供されない→スキップ
  7. フォーマットの検証
    1. 各フォーマットについて…
      1. format = 'UPPER_CASE'
        1. フォーマットをチェック→不合格。
          • 複数のフォーマットを提供する場合、名前はそれらのうち1つにマッチするだけで良いことに注意してください!
      2. format = 'StrictPascalCase'
        1. フォーマットをチェック→合格。
  8. 合格

名前: IMyInterface セレクタ

{
"format": ["StrictPascalCase"],
"trailingUnderscore": "allow",
"custom": {
"regex": "^I[A-Z]",
"match": false
}
}
  1. name = IMyInterface
  2. 先頭のアンダースコアの検証
    1. 設定が提供されない→スキップ
  3. 末尾のアンダースコアの検証
    1. 設定が提供される
    2. 名前をチェック→合格
    3. アンダースコアをトリム→name = IMyInterface
  4. プレフィックスの検証
    1. 設定が提供されない→スキップ
  5. サフィックスの検証
    1. 設定が提供されない→スキップ
  6. カスタムの検証
    1. 設定が提供される
    2. regex = new RegExp("^I[A-Z]")
    3. regex.test(name) === custom.match
    4. 不合格 →レポートして終了

グループセレクタにmodifiersを提供した場合、どうなるか?

一部のグループセレクタはmodifiersを受け入れます。ほとんどの場合、これらは個別セレクタの場合とまったく同じように機能します。ただし、修飾子がグループセレクタによってカバーされるすべての個別セレクタに適用されないという例外が1つあります。

例えば、memberLikeにはenumMemberセレクタが含まれており、protected修飾子を許可しています。enumMemberは決してprotectedになることはできないため、以下の設定はenumMemberに一致することはありません。

{
"selector": "memberLike",
"modifiers": ["protected"]
}

マッチングを支援するために、アクセシビリティを指定できないメンバーは常にpublic修飾子を持ちます。つまり、以下の設定は常にenumMemberに一致します。

{
"selector": "memberLike",
"modifiers": ["public"]
}

すべての変数、関数、プロパティがcamelCaseに従うことを強制します

{
"@typescript-eslint/naming-convention": [
"error",
{ "selector": "variableLike", "format": ["camelCase"] }
]
}

プライベートメンバーがアンダースコアで始まることを強制します

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "memberLike",
"modifiers": ["private"],
"format": ["camelCase"],
"leadingUnderscore": "require"
}
]
}

ブール型の変数が許可された動詞で始まることを強制します

注: 上記で説明されているように、プレフィックスはフォーマットが検証される前にトリムされるため、isEnabledなどの変数を許可するにはPascalCaseを使用する必要があります。

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "variable",
"types": ["boolean"],
"format": ["PascalCase"],
"prefix": ["is", "should", "has", "can", "did", "will"]
}
]
}

すべての変数がcamelCaseまたはUPPER_CASEのいずれかであることを強制します

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "variable",
"format": ["camelCase", "UPPER_CASE"]
}
]
}

すべてのconst変数がUPPER_CASEであることを強制します

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "variable",
"modifiers": ["const"],
"format": ["UPPER_CASE"]
}
]
}

型パラメータ(ジェネリック)がTで始まることを強制します

これにより、古いgeneric-type-namingルールをエミュレートできます。

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "typeParameter",
"format": ["PascalCase"],
"prefix": ["T"]
}
]
}

インターフェース名がIで始まらないことを強制します

これにより、古いinterface-name-prefixルールをエミュレートできます。

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "interface",
"format": ["PascalCase"],
"custom": {
"regex": "^I[A-Z]",
"match": false
}
}
]
}

関数名がcamelCaseまたはPascalCaseのいずれかであることを強制します

関数名は通常camelCaseですが、UIライブラリコンポーネント(特にReactやSolidなどのJSX)では、固有の要素と区別するためにPascalCaseを使用します。関数コンポーネントを作成する場合は、関数に対してcamelCaseとPascalCaseの両方を許可することを検討してください。

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "function",
"format": ["camelCase", "PascalCase"]
}
]
}

変数名と関数名がcamelCaseであることを強制します

これにより、同じパターンを持つ複数の型をlintできます。

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": ["variable", "function"],
"format": ["camelCase"],
"leadingUnderscore": "allow"
}
]
}

引用符を必要とするプロパティを無視します

規約に違反する引用符付きの名前を使用しなければならない場合があります(例:HTTPヘッダー)。これがコードベースで一般的なことである場合、いくつかのオプションがあります。

引用符が必要なすべてのプロパティ名を許可するだけで良い場合は、requiresQuotes修飾子を使用して、引用符が必要なプロパティ名にマッチさせ、format: nullを使用して名前を無視できます。

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": [
"classProperty",
"objectLiteralProperty",
"typeProperty",
"classMethod",
"objectLiteralMethod",
"typeMethod",
"accessor",
"enumMember",
],
"format": null,
"modifiers": ["requiresQuotes"],
},
],
}

例外の数が少なく、既知のリストがある場合は、filterオプションを使用して、これらの特定の名前のみを無視できます。

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "property",
"format": ["strictCamelCase"],
"filter": {
// you can expand this regex to add more allowed names
"regex": "^(Property-Name-One|Property-Name-Two)$",
"match": false,
},
},
],
}

filterオプションを使用して、特定の文字を含む名前を無視できます。

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "property",
"format": ["strictCamelCase"],
"filter": {
// you can expand this regex as you find more cases that require quoting that you want to allow
"regex": "[- ]",
"match": false,
},
},
],
}

引用符で囲まれた名前を無視する方法はありません。引用符が必要な名前のみです。これは意図的なものです。名前を引用符で囲むことは、適切な名前付けのための脱出経路ではありません。特定の名前のための脱出経路が必要な場合は、eslint-disableコメントを使用できます。

分割代入された名前を無視します

命名規則に違反する場合でも、分割代入されたプロパティが元の名前を保持することを許可する場合があります。

destructured修飾子を使用してこれらの名前にマッチさせ、format: nullを明示的に設定して、フォーマットを適用しないようにできます。

{
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "variable",
"modifiers": ["destructured"],
"format": null,
},
],
}

コードベースがESLintのcamelcase規約に従うことを強制します

{
"camelcase": "off",
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "default",
"format": ["camelCase"]
},

{
"selector": "variable",
"format": ["camelCase", "UPPER_CASE"]
},
{
"selector": "parameter",
"format": ["camelCase"],
"leadingUnderscore": "allow"
},

{
"selector": "memberLike",
"modifiers": ["private"],
"format": ["camelCase"],
"leadingUnderscore": "require"
},

{
"selector": "typeLike",
"format": ["PascalCase"]
}
]
}

使用しない場合

このルールは非常に厳格になる可能性があります。命名規則を厳格に適用する必要がない場合は、命名標準の非常に重大な違反をフラグ表示するためだけに使用することをお勧めします。そのようなプロセスがある場合は、命名規則を文書化し、コードレビューで適用することを検討してください。

命名規則を何も適用したくない場合は、このルールを無効にできます。

ただし、スタイルの不一致はプロジェクトの可読性を損なう可能性があることに注意してください。命名規則を重視する場合は、プロジェクトに最適なこのルールの単一のオプションを選択することをお勧めします。


型チェックされたlintルールは従来のlintルールよりも強力ですが、型チェックされたlintingの構成も必要です。型チェックされたルールを有効にした後にパフォーマンスの低下が発生した場合は、パフォーマンスに関するトラブルシューティングを参照してください。

リソース