Skip to content

Nick2bad4u/eslint-plugin-typefest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

464 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

eslint-plugin-typefest

npm license. npm total downloads. latest GitHub release. GitHub stars. GitHub forks. GitHub open issues. codecov. Mutation testing badge.

ESLint plugin for teams that want consistent TypeScript-first conventions based on:

The plugin ships focused rule sets for modern flat config usage, with parser setup included in each preset config.

Table of contents

  1. Installation
  2. Quick start (flat config)
  3. Presets
  4. Configuration examples by preset
  5. Global settings
  6. Rules
  7. Contributors ✨

Installation

npm install --save-dev eslint-plugin-typefest typescript

@typescript-eslint/parser is loaded automatically by plugin presets.

Compatibility

  • Supported ESLint versions: 9.x and 10.x
  • Config system: Flat Config only (eslint.config.*)
  • Node.js runtime: >=22.0.0

Quick start (flat config)

import typefest from "eslint-plugin-typefest";

export default [typefest.configs.recommended];

That is enough for TypeScript files (**/*.{ts,tsx,mts,cts}).

Presets

This plugin intentionally exports eight presets:

Preset
🟒 typefest.configs.minimal
🟑 typefest.configs.recommended
🟠 typefest.configs["recommended-type-checked"]
πŸ”΄ typefest.configs.strict
🟣 typefest.configs.all
πŸ§ͺ typefest.configs.experimental
πŸ’  typefest.configs["type-fest/types"]
✴️ typefest.configs["ts-extras/type-guards"]

Configuration examples by preset

import typefest from "eslint-plugin-typefest";

export default [
 // Smallest baseline footprint.
 typefest.configs.minimal,

 // Balanced default for most teams.
 // typefest.configs.recommended,

 // Recommended plus type-aware ts-extras helper rules.
 // typefest.configs["recommended-type-checked"],

 // Recommended plus additional stable runtime utilities.
 // typefest.configs.strict,

 // Every stable rule.
 // typefest.configs.all,

 // Every stable rule plus experimental candidate rules.
 // typefest.configs.experimental,

 // Focused subsets:
 // typefest.configs["type-fest/types"],
 // typefest.configs["ts-extras/type-guards"],
];

Parser setup behavior

Each preset already includes:

  • files: ["**/*.{ts,tsx,mts,cts}"]
  • languageOptions.parser (@typescript-eslint/parser)
  • languageOptions.parserOptions:
    • ecmaVersion: "latest"
    • projectService: true (for presets that include typed rules, such as recommended-type-checked, strict, all, and experimental)
    • sourceType: "module"

End users usually do not need to wire parser config manually.

If you need custom parser options (for example tsconfigRootDir), extend a preset:

import typefest from "eslint-plugin-typefest";

const recommended = typefest.configs.recommended;

export default [
 {
  ...recommended,
  languageOptions: {
   ...recommended.languageOptions,
   parserOptions: {
    ...recommended.languageOptions?.parserOptions,
    // Add projectService only when you opt into a type-aware preset.
   },
  },
 },
];

Global settings

You can globally disable autofixes that add missing imports while still keeping rule reports and non-import autofixes enabled.

import typefest from "eslint-plugin-typefest";

export default [
 {
  ...typefest.configs.recommended,
  settings: {
   typefest: {
    // Disable all autofixes while keeping suggestions enabled.
    // disableAllAutofixes: true,

    // Disable only autofixes that add missing imports.
    disableImportInsertionFixes: true,
   },
  },
 },
];

When settings.typefest.disableImportInsertionFixes is true, rules that would normally add a missing type-fest or ts-extras import will report without applying that import-adding autofix. Autofixes that do not require inserting a new import (for example, when the replacement symbol is already in scope) still apply.

When settings.typefest.disableAllAutofixes is true, all rule autofixes are suppressed, but reports and suggestions remain available.

If both settings are enabled, disableAllAutofixes takes precedence for autofix behavior.

Rules

Rule Fix Preset key
prefer-ts-extras-array-at πŸ”§ πŸ”΄ 🟣
prefer-ts-extras-array-concat πŸ”§ πŸ”΄ 🟣
prefer-ts-extras-array-first πŸ”§ πŸ’‘ πŸ”΄ 🟣
prefer-ts-extras-array-includes πŸ”§ πŸ’‘ 🟠 πŸ”΄ 🟣 ✴️
prefer-ts-extras-array-join πŸ”§ πŸ”΄ 🟣
prefer-ts-extras-array-last πŸ”§ πŸ’‘ 🟠 πŸ”΄ 🟣
prefer-ts-extras-as-writable πŸ”§ πŸ”΄ 🟣
prefer-ts-extras-assert-defined πŸ”§ πŸ’‘ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-assert-error πŸ’‘ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-assert-never πŸ’‘ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-assert-present πŸ”§ πŸ’‘ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-defined πŸ”§ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-defined-filter πŸ”§ 🟒 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-empty πŸ”§ 🟠 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-equal-type πŸ’‘ 🟣
prefer-ts-extras-is-finite πŸ”§ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-infinite πŸ”§ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-integer πŸ”§ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-present πŸ”§ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-present-filter πŸ”§ 🟒 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-property-defined πŸ”§ 🟒 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-property-present πŸ”§ 🟒 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-is-safe-integer πŸ”§ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-key-in πŸ”§ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-not πŸ”§ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-object-entries πŸ”§ πŸ”΄ 🟣
prefer-ts-extras-object-from-entries πŸ”§ πŸ”΄ 🟣
prefer-ts-extras-object-has-in πŸ”§ πŸ’‘ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-object-has-own πŸ”§ πŸ’‘ 🟑 πŸ”΄ 🟣 ✴️
prefer-ts-extras-object-keys πŸ”§ πŸ”΄ 🟣
prefer-ts-extras-object-map-values β€” πŸ§ͺ
prefer-ts-extras-object-values πŸ”§ πŸ”΄ 🟣
prefer-ts-extras-safe-cast-to πŸ”§ 🟠 πŸ”΄ 🟣 ✴️
prefer-ts-extras-set-has πŸ”§ πŸ’‘ 🟠 πŸ”΄ 🟣 ✴️
prefer-ts-extras-string-split πŸ”§ πŸ”΄ 🟣
prefer-type-fest-absolute πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-abstract-constructor πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-and πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-and-all πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-array-element πŸ”§ 🟠 πŸ”΄ 🟣
prefer-type-fest-array-length πŸ”§ 🟠 πŸ”΄ 🟣
prefer-type-fest-array-values πŸ”§ 🟠 πŸ”΄ 🟣
prefer-type-fest-arrayable πŸ”§ 🟒 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-async-return-type πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-asyncify β€” πŸ§ͺ
prefer-type-fest-conditional-except β€” πŸ§ͺ
prefer-type-fest-conditional-keys β€” πŸ§ͺ
prefer-type-fest-conditional-pick πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-conditional-pick-deep πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-constructor πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-distributed-omit β€” πŸ§ͺ
prefer-type-fest-distributed-pick β€” πŸ§ͺ
prefer-type-fest-entries πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-entry πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-except πŸ”§ 🟒 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-extract-rest-element πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-has-optional-keys πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-has-readonly-keys πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-has-required-keys πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-has-writable-keys πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-if πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-is-any πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-is-never πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-is-null πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-is-nullable πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-is-tuple πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-is-undefined πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-is-unknown πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-iterable-element πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-json-array πŸ”§ 🟒 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-json-object πŸ”§ 🟒 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-json-primitive πŸ”§ 🟒 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-json-value πŸ’‘ 🟒 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-keys-of-union πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-less-than πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-less-than-or-equal πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-literal-union πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-merge β€” πŸ§ͺ
prefer-type-fest-merge-exclusive πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-non-empty-tuple πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-non-nullable-deep πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-omit-index-signature πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-optional πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-optional-keys-of πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-or πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-or-all πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-partial-deep πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-pick-index-signature β€” πŸ§ͺ
prefer-type-fest-primitive πŸ”§ 🟒 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-promisable πŸ”§ 🟒 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-readonly-deep πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-readonly-keys-of πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-require-all-or-none πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-require-at-least-one πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-require-exactly-one πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-require-one-or-none πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-required-deep πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-required-keys-of πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-schema πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-set-non-nullable πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-set-optional πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-set-readonly πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-set-required πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-set-return-type β€” πŸ§ͺ
prefer-type-fest-simplify πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-stringified β€” πŸ§ͺ
prefer-type-fest-tagged-brands πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-tuple-of πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-union-length πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-union-member πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-union-to-intersection β€” πŸ§ͺ
prefer-type-fest-union-to-tuple πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-unknown-array πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-unknown-map πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-unknown-record πŸ”§ 🟒 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-unknown-set πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-unwrap-tagged πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-value-of πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-writable πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-writable-deep πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 
prefer-type-fest-writable-keys-of πŸ”§ 🟑 πŸ”΄ 🟣 πŸ’ 

Contributors ✨

All Contributors.

Thanks goes to these wonderful people (emoji key):

Nick2bad4u
Nick2bad4u

πŸ› πŸ’» πŸ“– πŸ€” πŸš‡ 🚧 πŸ‘€ ⚠️ πŸ”§
Snyk bot
Snyk bot

πŸ›‘οΈ πŸš‡ 🚧 πŸ‘€
StepSecurity Bot
StepSecurity Bot

πŸ›‘οΈ πŸš‡ 🚧
dependabot[bot]
dependabot[bot]

πŸš‡ πŸ›‘οΈ
github-actions[bot]
github-actions[bot]

πŸ’» πŸš‡

About

ESLint plugin focused on encouraging consistent usage of "type-fest" and "ts-extras"

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors