complete/no-object-methods-with-map-set
💼 This rule is enabled in the ✅ recommended config.
📝 Disallows using object methods with maps and sets.
💭 This rule requires type information.
Specifically, it disallows Object.entries, Object.keys, and Object.values,
since doing this is virtually always a bug.
Rule Details
Section titled “Rule Details”In order to iterate over a JavaScript object, you might have some code like this:
for (const [key, value] of Object.entries(foo)) { // Do something.}However, it is common to refactor objects to maps, since they are more performant and provide a nicer API. After such a refactor, the above code block would still pass the TypeScript compiler, but would not work at all.
This rule prevents the use of specific Object methods with maps and sets.
declare const myMap: Map<string, string>;
// Badfor (const [key, value] of Object.entries(myMap)) {}for (const key of Object.keys(myMap)) {}for (const value of Object.values(myMap)) {}
// Goodfor (const [key, value] of myMap.entries()) {}for (const key of myMap.keys()) {}for (const value of myMap.values()) {}
declare const mySet: Set<string>;
// Badfor (const entry of Object.entries(mySet)) {}for (const key of Object.keys(mySet)) {}for (const value of Object.values(mySet)) {}
// Goodfor (const entry of mySet.entries()) {}for (const key of mySet.keys()) {}for (const value of mySet.values()) {}Options
Section titled “Options”This rule is not configurable.
