prefer-type-fest-has-readonly-keys
Require TypeFest HasReadonlyKeys<T> over ReadonlyKeysOf<T> emptiness checks.
Targeted pattern scopeโ
This rule reports exact ReadonlyKeysOf<T> extends never ? false : true checks when ReadonlyKeysOf is imported from type-fest.
It supports direct, aliased, and namespace-qualified TypeFest imports.
What this rule reportsโ
This rule reports manual readonly-key existence checks that can be replaced by HasReadonlyKeys<T>.
Why this rule existsโ
HasReadonlyKeys<T> makes readonly-key existence intent explicit and avoids repeating TypeFest helper compositions in user code.
โ Incorrectโ
import type { ReadonlyKeysOf } from "type-fest";
type Result<T extends object> = ReadonlyKeysOf<T> extends never ? false : true;
โ Correctโ
import type { HasReadonlyKeys } from "type-fest";
type Result<T extends object> = HasReadonlyKeys<T>;
Behavior and migration notesโ
- The
ReadonlyKeysOfreference must resolve to atype-festimport. - The rule only reports the exact
extends never ? false : trueshape. - Inverted checks and custom fallback branches are ignored.
- Autofix is skipped when
HasReadonlyKeysis shadowed in the local scope.
Additional examplesโ
โ Incorrect โ Namespace importโ
import type * as TypeFest from "type-fest";
type Result<T extends object> = TypeFest.ReadonlyKeysOf<T> extends never ? false : true;
โ Correct โ Namespace importโ
import type { HasReadonlyKeys } from "type-fest";
type Result<T extends object> = HasReadonlyKeys<T>;
โ Correct โ Inverted checkโ
import type { ReadonlyKeysOf } from "type-fest";
type Result<T extends object> = ReadonlyKeysOf<T> extends never ? true : false;
ESLint flat config exampleโ
import typefest from "eslint-plugin-typefest";
export default [
{
plugins: { typefest },
rules: {
"typefest/prefer-type-fest-has-readonly-keys": "error",
},
},
];
When not to use itโ
Disable this rule if a public helper must keep the expanded TypeFest composition for compatibility or documentation reasons.
Package documentationโ
TypeFest package documentation:
Source file: source/has-readonly-keys.d.ts
Rule catalog ID: R119