Skip to content

Commit 2c34128

Browse files
authored
Paths: Fix leavesOnly behavior with never leaves (#1350)
1 parent ac3b50e commit 2c34128

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

source/paths.d.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -213,13 +213,15 @@ type InternalPaths<T, Options extends Required<PathsOptions>, CurrentDepth exten
213213
? ((Options['leavesOnly'] extends true
214214
? Options['maxRecursionDepth'] extends CurrentDepth
215215
? TransformedKey
216-
: T[Key] extends infer Value // For distributing `T[Key]`
217-
? (Value extends readonly [] | NonRecursiveType | Exclude<MapsSetsOrArrays, UnknownArray>
218-
? TransformedKey
219-
: IsNever<keyof Value> extends true // Check for empty object & `unknown`, because `keyof unknown` is `never`.
216+
: IsNever<T[Key]> extends true
217+
? TransformedKey
218+
: T[Key] extends infer Value // For distributing `T[Key]`
219+
? (Value extends readonly [] | NonRecursiveType | Exclude<MapsSetsOrArrays, UnknownArray>
220220
? TransformedKey
221-
: never)
222-
: never // Should never happen
221+
: IsNever<keyof Value> extends true // Check for empty object & `unknown`, because `keyof unknown` is `never`.
222+
? TransformedKey
223+
: never)
224+
: never // Should never happen
223225
: TransformedKey
224226
) extends infer _TransformedKey
225227
// If `depth` is provided, the condition becomes truthy only when it matches `CurrentDepth`.

test-d/paths.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,9 @@ expectType<'a.b'>(unknownLeaves);
295295
declare const anyLeaves: Paths<{a: {b: any}}, {leavesOnly: true}>;
296296
expectType<'a.b'>(anyLeaves);
297297

298+
declare const neverLeaves: Paths<{a: {b: never}}, {leavesOnly: true}>;
299+
expectType<'a.b'>(neverLeaves);
300+
298301
// -- depth option --
299302
declare const zeroDepth: Paths<DeepObject, {depth: 0}>;
300303
expectType<'a'>(zeroDepth);

0 commit comments

Comments
 (0)