Skip to main content

prefer-ts-extras-is-finite

Prefer isFinite from ts-extras over Number.isFinite(...).

This keeps predicate usage consistent with other ts-extras narrowing helpers.

Targeted pattern scopeโ€‹

This rule focuses on direct Number.isFinite(value) calls that can be migrated to isFinite(value) with deterministic fixes.

  • Number.isFinite(value) call sites that can use isFinite(value).

Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep isFinite(value) migrations safe.

What this rule reportsโ€‹

This rule reports Number.isFinite(value) call sites when isFinite(value) is the intended replacement.

  • Number.isFinite(value) call sites that can use isFinite(value).

Why this rule existsโ€‹

isFinite keeps numeric predicate usage aligned with the rest of the ts-extras guard set.

  • Numeric validation helpers use one naming/style convention.
  • Native/helper mixing in guard-heavy code is reduced.
  • Number guard logic stays consistent across modules.

โŒ Incorrectโ€‹

const isValid = Number.isFinite(value);

โœ… Correctโ€‹

const isValid = isFinite(value);

Behavior and migration notesโ€‹

  • Runtime behavior matches native Number.isFinite.
  • Only numbers are considered; numeric strings are not coerced.
  • NaN, Infinity, and -Infinity still return false.

Additional examplesโ€‹

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

if (Number.isFinite(metric)) {
consume(metric);
}

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

if (isFinite(metric)) {
consume(metric);
}

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

const valid = isFinite(durationMs);

ESLint flat config exampleโ€‹

import typefest from "eslint-plugin-typefest";

export default [
{
plugins: { typefest },
rules: {
"typefest/prefer-ts-extras-is-finite": "error",
},
},
];

When not to use itโ€‹

Disable this rule if your team explicitly standardizes on native Number.isFinite calls.

Package documentationโ€‹

ts-extras package documentation:

Source file: source/is-finite.ts

/**
A strongly-typed version of `Number.isFinite()`.

@category Improved builtin
@category Type guard
*/

Rule catalog ID: R018

Further readingโ€‹

Adoption resourcesโ€‹