Skip to main content

prefer-type-fest-conditional-pick-deep

Require TypeFest ConditionalPickDeep<T, Condition, Options?> instead of legacy deep conditional-pick aliases.

Targeted pattern scopeโ€‹

This rule targets imported aliases that mirror deep conditional property filtering semantics (for example, PickDeepByTypes and PickDeepByType).

What this rule reportsโ€‹

  • Type references that resolve to imported deep conditional-pick aliases.

Why this rule existsโ€‹

ConditionalPickDeep is the canonical TypeFest helper for recursively filtering object properties by value condition. Standardizing on this utility improves consistency and readability.

โŒ Incorrectโ€‹

import type { PickDeepByTypes } from "type-aliases";

type StringProps = PickDeepByTypes<User, string>;

โœ… Correctโ€‹

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

type StringProps = ConditionalPickDeep<User, string>;

Behavior and migration notesโ€‹

  • ConditionalPickDeep<T, Condition, Options?> recursively selects keys whose values match Condition.
  • This rule only targets known alias names that represent the same intent.
  • Keep custom aliases only when they intentionally add behavior beyond deep conditional filtering.

Additional examplesโ€‹

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

import type { PickDeepByType } from "type-aliases";

type NumericProps = PickDeepByType<User, number>;

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

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

type NumericProps = ConditionalPickDeep<User, number>;

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

type DateProps = ConditionalPickDeep<User, Date>;

ESLint flat config exampleโ€‹

import typefest from "eslint-plugin-typefest";

export default [
{
plugins: { typefest },
rules: {
"typefest/prefer-type-fest-conditional-pick-deep": "error",
},
},
];

When not to use itโ€‹

Disable this rule if external API contracts require specific alias names.

Package documentationโ€‹

TypeFest package documentation:

Source file: source/conditional-pick-deep.d.ts

/**
Pick keys recursively from the shape that matches the given condition.

@category Object
*/
export type ConditionalPickDeep<
Type,
Condition,
Options extends ConditionalPickDeepOptions = {},
> = ...

Rule catalog ID: R082

Further readingโ€‹

Adoption resourcesโ€‹