Skip to content

Commit 1b59cfd

Browse files
committed
fix: ApplyDefaultOptions type failing due to error Union is to complex to represent
1 parent 494bc94 commit 1b59cfd

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

source/internal/object.d.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import type {IsAny} from '../is-any.d.ts';
99
import type {If} from '../if.d.ts';
1010
import type {IsNever} from '../is-never.d.ts';
1111
import type {FilterDefinedKeys, FilterOptionalKeys} from './keys.d.ts';
12-
import type {NonRecursiveType} from './type.d.ts';
12+
import type {IfNotAnyOrNever, NonRecursiveType} from './type.d.ts';
1313
import type {ToString} from './string.d.ts';
1414

1515
/**
@@ -220,16 +220,24 @@ type Result = ApplyDefaultOptions<PathsOptions, DefaultPathsOptions, SpecifiedOp
220220
*/
221221
export type ApplyDefaultOptions<
222222
Options extends object,
223-
Defaults extends Simplify<Omit<Required<Options>, RequiredKeysOf<Options>> & Partial<Record<RequiredKeysOf<Options>, never>>>,
223+
Defaults extends Simplify<
224+
Omit<Required<Options>, RequiredKeysOf<Options>> &
225+
Partial<Record<RequiredKeysOf<Options>, never>>
226+
>,
224227
SpecifiedOptions extends Options,
225228
> =
226-
If<IsAny<SpecifiedOptions>, Defaults,
227-
If<IsNever<SpecifiedOptions>, Defaults,
228-
Simplify<Merge<Defaults, {
229-
[Key in keyof SpecifiedOptions
230-
as Key extends OptionalKeysOf<Options> ? undefined extends SpecifiedOptions[Key] ? never : Key : Key
231-
]: SpecifiedOptions[Key]
232-
}> & Required<Options>>>>; // `& Required<Options>` ensures that `ApplyDefaultOptions<SomeOption, ...>` is always assignable to `Required<SomeOption>`
229+
IfNotAnyOrNever<SpecifiedOptions,
230+
Merge<Defaults, {
231+
[Key in keyof SpecifiedOptions as Key extends OptionalKeysOf<Options>
232+
? undefined extends SpecifiedOptions[Key]
233+
? never
234+
: Key
235+
: Key
236+
]: SpecifiedOptions[Key]
237+
}> extends infer ResolvedOptions extends Required<Options>
238+
? Simplify<ResolvedOptions>
239+
: never,
240+
Defaults, Defaults>;
233241

234242
/**
235243
Collapses literal types in a union into their corresponding primitive types, when possible. For example, `CollapseLiterals<'foo' | 'bar' | (string & {})>` returns `string`.

0 commit comments

Comments
 (0)