diff --git a/source/paths.d.ts b/source/paths.d.ts index 7b6afb1f2..d0edfbaf9 100644 --- a/source/paths.d.ts +++ b/source/paths.d.ts @@ -213,13 +213,15 @@ type InternalPaths, CurrentDepth exten ? ((Options['leavesOnly'] extends true ? Options['maxRecursionDepth'] extends CurrentDepth ? TransformedKey - : T[Key] extends infer Value // For distributing `T[Key]` - ? (Value extends readonly [] | NonRecursiveType | Exclude - ? TransformedKey - : IsNever extends true // Check for empty object & `unknown`, because `keyof unknown` is `never`. + : IsNever extends true + ? TransformedKey + : T[Key] extends infer Value // For distributing `T[Key]` + ? (Value extends readonly [] | NonRecursiveType | Exclude ? TransformedKey - : never) - : never // Should never happen + : IsNever extends true // Check for empty object & `unknown`, because `keyof unknown` is `never`. + ? TransformedKey + : never) + : never // Should never happen : TransformedKey ) extends infer _TransformedKey // If `depth` is provided, the condition becomes truthy only when it matches `CurrentDepth`. diff --git a/test-d/paths.ts b/test-d/paths.ts index 5ad90882c..c127e1f63 100644 --- a/test-d/paths.ts +++ b/test-d/paths.ts @@ -295,6 +295,9 @@ expectType<'a.b'>(unknownLeaves); declare const anyLeaves: Paths<{a: {b: any}}, {leavesOnly: true}>; expectType<'a.b'>(anyLeaves); +declare const neverLeaves: Paths<{a: {b: never}}, {leavesOnly: true}>; +expectType<'a.b'>(neverLeaves); + // -- depth option -- declare const zeroDepth: Paths; expectType<'a'>(zeroDepth);