Skip to main content

prefer-type-fest-less-than-or-equal

Require TypeFest LessThanOrEqual<A, B> over boolean wrappers built from GreaterThan<A, B>.

Targeted pattern scopeโ€‹

This rule targets equivalent conditional wrappers such as GreaterThan<A, B> extends true ? false : true and infer-wrapped variants.

What this rule reportsโ€‹

  • Conditional types equivalent to LessThanOrEqual<A, B> that are composed from GreaterThan<A, B>.

Why this rule existsโ€‹

LessThanOrEqual is the canonical TypeFest numeric comparison helper for <= checks. Using it directly improves readability and avoids repeated wrapper patterns.

โŒ Incorrectโ€‹

import type { GreaterThan } from "type-fest";

type IsLessOrEqual = GreaterThan<1, 2> extends true ? false : true;

โœ… Correctโ€‹

import type { LessThanOrEqual } from "type-fest";

type IsLessOrEqual = LessThanOrEqual<1, 2>;

Behavior and migration notesโ€‹

  • This rule targets wrappers equivalent to LessThanOrEqual<A, B>.
  • It handles direct and infer-wrapped conditional forms.
  • It does not report wrappers whose boolean branches do not match <= semantics.

Additional examplesโ€‹

โŒ Incorrect โ€” Additional exampleโ€‹

import type { GreaterThan } from "type-fest";

type IsLessOrEqual =
GreaterThan<4, 9> extends infer Result
? Result extends true
? false
: true
: never;

โœ… Correct โ€” Additional exampleโ€‹

import type { LessThanOrEqual } from "type-fest";

type IsLessOrEqual = LessThanOrEqual<4, 9>;

โœ… Correct โ€” Repository-wide usageโ€‹

type IsNonPositive<N extends number> = LessThanOrEqual<N, 0>;

ESLint flat config exampleโ€‹

import typefest from "eslint-plugin-typefest";

export default [
{
plugins: { typefest },
rules: {
"typefest/prefer-type-fest-less-than-or-equal": "error",
},
},
];

When not to use itโ€‹

Disable this rule if your codebase intentionally standardizes on custom numeric wrapper types.

Package documentationโ€‹

TypeFest package documentation:

Source file: source/less-than-or-equal.d.ts

/**
Returns a boolean for whether a given number is less than or equal to another number.
*/
export type LessThanOrEqual<A extends number, B extends number> = ...

Rule catalog ID: R085

Further readingโ€‹

Adoption resourcesโ€‹