@@ -9,7 +9,7 @@ import type {IsAny} from '../is-any.d.ts';
9
9
import type { If } from '../if.d.ts' ;
10
10
import type { IsNever } from '../is-never.d.ts' ;
11
11
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' ;
13
13
import type { ToString } from './string.d.ts' ;
14
14
15
15
/**
@@ -220,16 +220,24 @@ type Result = ApplyDefaultOptions<PathsOptions, DefaultPathsOptions, SpecifiedOp
220
220
*/
221
221
export type ApplyDefaultOptions <
222
222
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
+ > ,
224
227
SpecifiedOptions extends Options ,
225
228
> =
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 > ;
233
241
234
242
/**
235
243
Collapses literal types in a union into their corresponding primitive types, when possible. For example, `CollapseLiterals<'foo' | 'bar' | (string & {})>` returns `string`.
0 commit comments