import type { TSchema } from '../schema/index'; import { type TNever } from '../never/index'; import { type TOptional } from '../optional/index'; import type { TReadonly } from '../readonly/index'; import { TIntersect, IntersectOptions } from './intersect-type'; type TIsIntersectOptional = (Types extends [infer Left extends TSchema, ...infer Right extends TSchema[]] ? Left extends TOptional ? TIsIntersectOptional : false : true); type TRemoveOptionalFromType = (Type extends TReadonly ? TReadonly> : Type extends TOptional ? TRemoveOptionalFromType : Type); type TRemoveOptionalFromRest = (Types extends [infer Left extends TSchema, ...infer Right extends TSchema[]] ? Left extends TOptional ? TRemoveOptionalFromRest]> : TRemoveOptionalFromRest : Result); type TResolveIntersect = (TIsIntersectOptional extends true ? TOptional>> : TIntersect>); export type TIntersectEvaluated = (Types extends [TSchema] ? Types[0] : Types extends [] ? TNever : TResolveIntersect); /** `[Json]` Creates an evaluated Intersect type */ export declare function IntersectEvaluated>(types: [...Types], options?: IntersectOptions): Result; export {};