Skip to main content

dot-notation

Enforce dot notation whenever possible.

🔒

Extending "plugin:@typescript-eslint/strict" in an ESLint configuration enables this rule.

🔧

Some problems reported by this rule are automatically fixable by the --fix ESLint command line option.

💭

This rule requires type information to run.

Examples

This rule extends the base eslint/dot-notation rule. It adds:

  • Support for optionally ignoring computed private and/or protected member access.
  • Compatibility with TypeScript's noPropertyAccessFromIndexSignature option.

How to Use

.eslintrc.cjs
module.exports = {
"rules": {
// Note: you must disable the base rule as it can report incorrect errors
"dot-notation": "off",
"@typescript-eslint/dot-notation": "error"
}
};
Try this rule in the playground ↗

Options

See eslint/dot-notation options.

This rule adds the following options:

interface Options extends BaseDotNotationOptions {
allowPrivateClassPropertyAccess?: boolean;
allowProtectedClassPropertyAccess?: boolean;
allowIndexSignaturePropertyAccess?: boolean;
}

const defaultOptions: Options = {
...baseDotNotationDefaultOptions,
allowPrivateClassPropertyAccess: false,
allowProtectedClassPropertyAccess: false,
allowIndexSignaturePropertyAccess: false,
};

If the TypeScript compiler option noPropertyAccessFromIndexSignature is set to true, then this rule always allows the use of square bracket notation to access properties of types that have a string index signature, even if allowIndexSignaturePropertyAccess is false.

allowPrivateClassPropertyAccess

Example of a correct code when allowPrivateClassPropertyAccess is set to true:

class X {
private priv_prop = 123;
}

const x = new X();
x['priv_prop'] = 123;

allowProtectedClassPropertyAccess

Example of a correct code when allowProtectedClassPropertyAccess is set to true:

class X {
protected protected_prop = 123;
}

const x = new X();
x['protected_prop'] = 123;

allowIndexSignaturePropertyAccess

Example of correct code when allowIndexSignaturePropertyAccess is set to true:

class X {
[key: string]: number;
}

const x = new X();
x['hello'] = 123;

If the TypeScript compiler option noPropertyAccessFromIndexSignature is set to true, then the above code is always allowed, even if allowIndexSignaturePropertyAccess is false.

Resources

Taken with ❤️ from ESLint core