import { type TReadonly } from '../../types/_readonly.mjs'; import { type TOptional } from '../../types/_optional.mjs'; import { type TSchema } from '../../types/schema.mjs'; import { type TProperties } from '../../types/properties.mjs'; import { type TObject } from '../../types/object.mjs'; import { type TNever } from '../../types/never.mjs'; import { type TTuple } from '../../types/tuple.mjs'; import { type TAddReadonly } from '../../action/_add_readonly.mjs'; import { type TAddOptional } from '../../action/_add_optional.mjs'; import { type TRemoveReadonly } from '../../action/_remove_readonly.mjs'; import { type TRemoveOptional } from '../../action/_remove_optional.mjs'; import { type TTupleElementsToProperties } from '../tuple/to_object.mjs'; import { type TEvaluateIntersect } from './evaluate.mjs'; /** Returns true if the type is a valid operand to Composite. */ export type TCanComposite = (Type extends TObject ? true : Type extends TTuple ? true : false); /** Returns true if the type is a valid operand to Composite. */ export declare function CanComposite(type: Type): TCanComposite; type TIsReadonlyProperty = (Left extends TReadonly ? Right extends TReadonly ? true : false : false); type TIsOptionalProperty = (Left extends TOptional ? Right extends TOptional ? true : false : false); type TCompositeProperty, IsOptional extends boolean = TIsOptionalProperty, Evaluated extends TSchema = TEvaluateIntersect<[Left, Right]>, Property extends TSchema = TRemoveReadonly>> = ([ IsReadonly, IsOptional ] extends [true, true] ? TAddReadonly> : [ IsReadonly, IsOptional ] extends [true, false] ? TAddReadonly : [ IsReadonly, IsOptional ] extends [false, true] ? TAddOptional : Property); type TCompositePropertyKey : Left[Key] : Key extends keyof Right ? Right[Key] : TNever)> = Result; type TCompositeProperties; }> = Result; type TGetProperties ? Properties : Type extends TTuple ? TTupleElementsToProperties : {})> = Result; export type TComposite, RightProperties extends TProperties = TGetProperties, Properties extends TProperties = TCompositeProperties, Result extends TSchema = TObject> = Result; export declare function Composite(left: Left, right: Right): TComposite; export {};