@@ -34,13 +34,17 @@ import type { XIf } from '../types/if.ts'
3434import type { XElse } from '../types/else.ts'
3535import type { XThen } from '../types/then.ts'
3636
37- type XStaticIfReduce < Types extends unknown [ ] , Result extends unknown = never > = (
38- Types extends [ infer Left extends unknown , ...infer Right extends unknown [ ] ]
39- ? XStaticIfReduce < Right , Result | Left >
40- : Result
41- )
4237export type XStaticIf < Stack extends string [ ] , Root extends XSchema , Schema extends XIf , IfSchema extends XSchema ,
43- Then extends unknown [ ] = Schema extends XThen < infer ThenSchema extends XSchema > ? [ XStaticSchema < Stack , Root , IfSchema > & XStaticSchema < Stack , Root , ThenSchema > ] : [ ] ,
44- Else extends unknown [ ] = Schema extends XElse < infer ElseSchema extends XSchema > ? [ ...Then , XStaticSchema < Stack , Root , ElseSchema > ] : Then ,
45- Result extends unknown = Else extends [ ] ? unknown : XStaticIfReduce < Else >
46- > = Result
38+ If extends unknown = XStaticSchema < Stack , Root , IfSchema > ,
39+ Then extends unknown = Schema extends XThen < infer ThenSchema extends XSchema > ? XStaticSchema < Stack , Root , ThenSchema > : never ,
40+ Else extends unknown = Schema extends XElse < infer ElseSchema extends XSchema > ? XStaticSchema < Stack , Root , ElseSchema > : never ,
41+
42+ IsThen extends boolean = Schema extends XThen ? true : false ,
43+ IsElse extends boolean = Schema extends XElse ? true : false ,
44+ Result extends unknown = (
45+ [ IsThen , IsElse ] extends [ true , true ] ? ( If & Then ) | Exclude < Else , If > :
46+ [ IsThen , IsElse ] extends [ true , false ] ? ( If & Then ) :
47+ [ IsThen , IsElse ] extends [ false , true ] ? Exclude < Else , If > :
48+ unknown
49+ )
50+ > = Result
0 commit comments