no-dynamic-delete
)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 Object
s 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.
Examples of correct code with this rule:
const container: { [i: string]: number } = { /* ... */ }; // Constant runtime lookups by string index delete container.aaa; // Constants that must be accessed by [] delete container[7]; delete container['-Infinity'];
Examples of incorrect code with this rule:
// 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()];
When you know your keys are safe to delete, this rule can be unnecessary. Some environments such as older browsers might not support Map
and Set
.
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.