Skip to main content

no-dynamic-delete

Disallow using the delete operator on computed key expressions.

πŸ”’

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.

Deleting dynamically computed keys can be dangerous and in some cases not well optimized. Using the delete operator on keys that aren't runtime constants could be a sign that you're using the wrong data structures. Using Objects with added and removed keys can cause occasional edge case bugs, such as if a key is named "hasOwnProperty".

Consider using a Map or Set if you’re storing collections of objects.

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-dynamic-delete": "error"
}
};

Try this rule in the playground β†—

Examples​

// Can be replaced with the constant equivalents, such as container.aaa
delete container['aaa'];
delete container['Infinity'];

// Dynamic, difficult-to-reason-about lookups
const name = 'name';
delete container[name];
delete container[name.toUpperCase()];
Open in Playground

Options​

This rule is not configurable.

When Not To Use It​

When you know your keys are safe to delete, this rule can be unnecessary. You might consider using ESLint disable comments for those specific situations instead of completely disabling this rule.

Do not consider this rule as performance advice before profiling your code's bottlenecks. Even repeated minor performance slowdowns likely do not significantly affect your application's general perceived speed.

Resources​