Skip to content

Commit

Permalink
Fix input and output type of intersect schema #601
Browse files Browse the repository at this point in the history
  • Loading branch information
fabian-hiller committed May 25, 2024
1 parent 51ce74d commit 8b2130c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 7 deletions.
2 changes: 1 addition & 1 deletion library/src/schemas/intersect/intersect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ export function intersect(
}

// Return output dataset
return dataset as Dataset<unknown, IntersectIssue | BaseIssue<unknown>>;
return dataset as Dataset<never, IntersectIssue | BaseIssue<unknown>>;
},
};
}
2 changes: 1 addition & 1 deletion library/src/schemas/intersect/intersectAsync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ export function intersectAsync(
}

// Return output dataset
return dataset as Dataset<unknown, IntersectIssue | BaseIssue<unknown>>;
return dataset as Dataset<never, IntersectIssue | BaseIssue<unknown>>;
},
};
}
32 changes: 27 additions & 5 deletions library/src/schemas/intersect/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@ import type {
BaseIssue,
BaseSchema,
BaseSchemaAsync,
InferInput,
InferOutput,
MaybeReadonly,
UnionToIntersect,
} from '../../types/index.ts';

/**
Expand Down Expand Up @@ -43,16 +40,41 @@ export type IntersectOptionsAsync = MaybeReadonly<
)[]
>;

/**
* Infer option type.
*/
type InferOption<TInput, TOutput> =
| BaseSchema<TInput, TOutput, BaseIssue<unknown>>
| BaseSchemaAsync<TInput, TOutput, BaseIssue<unknown>>;

/**
* Infer intersect input type.
*/
export type InferIntersectInput<
TOptions extends IntersectOptions | IntersectOptionsAsync,
> = UnionToIntersect<InferInput<TOptions[number]>>;
> =
TOptions extends MaybeReadonly<
[InferOption<infer TInput, unknown>, ...infer TRest]
>
? TRest extends MaybeReadonly<
[InferOption<unknown, unknown>, ...InferOption<unknown, unknown>[]]
>
? TInput & InferIntersectInput<TRest>
: TInput
: never;

/**
* Infer intersect output type.
*/
export type InferIntersectOutput<
TOptions extends IntersectOptions | IntersectOptionsAsync,
> = UnionToIntersect<InferOutput<TOptions[number]>>;
> =
TOptions extends MaybeReadonly<
[InferOption<unknown, infer TOutput>, ...infer TRest]
>
? TRest extends MaybeReadonly<
[InferOption<unknown, unknown>, ...InferOption<unknown, unknown>[]]
>
? TOutput & InferIntersectOutput<TRest>
: TOutput
: never;

0 comments on commit 8b2130c

Please sign in to comment.