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 useisFinite(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 useisFinite(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-Infinitystill returnfalse.
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