prefer-ts-extras-object-entries
Prefer objectEntries from ts-extras over Object.entries(...).
objectEntries(...) preserves stronger key/value typing for object iteration and reduces local casting noise.
Targeted pattern scopeโ
This rule focuses on direct Object.entries(value) calls that can be migrated to objectEntries(value) with deterministic fixes.
Object.entries(value)call sites that can useobjectEntries(value).
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep objectEntries(value) migrations safe.
What this rule reportsโ
This rule reports Object.entries(value) call sites when objectEntries(value) is the intended replacement.
Object.entries(value)call sites that can useobjectEntries(value).
Why this rule existsโ
objectEntries gives better static typing for entry iteration, especially when the object has known keys.
- Key unions are preserved more consistently in loops.
- Value access in tuple destructuring needs fewer local casts.
- Team code converges on one explicit runtime helper for entry iteration.
โ Incorrectโ
const pairs = Object.entries(siteStatusById);
โ Correctโ
const pairs = objectEntries(siteStatusById);
Behavior and migration notesโ
- Runtime semantics stay aligned with
Object.entries(own enumerable string-keyed entries only). - Property order behavior remains the same as native
Object.entries. - Symbol keys are still excluded, just like native behavior.
- For loosely typed inputs (for example
Record<string, unknown>), key type remains broad (string).
Additional examplesโ
โ Incorrect โ Additional exampleโ
const entries = Object.entries(settings);
โ Correct โ Additional exampleโ
const entries = objectEntries(settings);
โ Correct โ Repository-wide usageโ
for (const [key, value] of objectEntries(env)) {
void key;
void value;
}
ESLint flat config exampleโ
import typefest from "eslint-plugin-typefest";
export default [
{
plugins: { typefest },
rules: {
"typefest/prefer-ts-extras-object-entries": "error",
},
},
];
When not to use itโ
Disable this rule if you must use native Object.entries directly for interop constraints.
Package documentationโ
ts-extras package documentation:
Source file: source/object-entries.ts
/**
A strongly-typed version of `Object.entries()`.
This is useful since `Object.entries()` always returns an array of `Array<[string, T]>`. This function returns a strongly-typed array of the entries of the given object.
- [TypeScript issues about this](https://github.com/microsoft/TypeScript/pull/12253)
@example
```
import {objectEntries} from 'ts-extras';
const stronglyTypedEntries = objectEntries({a: 1, b: 2, c: 3});
//=> Array<['a' | 'b' | 'c', number]>
const untypedEntries = Object.entries({a: 1, b: 2, c: 3});
//=> Array<[string, number]>
```
@category Improved builtin
*/
Rule catalog ID: R026