import { type TSchema } from '../../types/schema.mjs'; import { type TAny } from '../../types/any.mjs'; import { type TNever } from '../../types/never.mjs'; import { type TUnknown } from '../../types/unknown.mjs'; import { type TCompare, type TCompareResult, CompareResultLeftInside, CompareResultRightInside, CompareResultEqual } from './compare.mjs'; import { type TComposite, type TCanComposite } from './composite.mjs'; type TNarrowCompareRule> = (Result extends typeof CompareResultLeftInside ? Left : Result extends typeof CompareResultRightInside ? Right : Result extends typeof CompareResultEqual ? Right : TNever); type TNarrowCompositeRule, CanCompositeRight extends boolean = TCanComposite> = ([ CanCompositeLeft, CanCompositeRight ] extends [true, true] ? TComposite : [ CanCompositeLeft, CanCompositeRight ] extends [true, false] ? Left : [ CanCompositeLeft, CanCompositeRight ] extends [false, true] ? Right : TNarrowCompareRule); export type TNarrow = (Left extends TNever ? TNever : Left extends TAny ? TAny : Left extends TUnknown ? Right : Right extends TNever ? TNever : Right extends TAny ? TAny : Right extends TUnknown ? Left : TNarrowCompositeRule); export declare function Narrow(left: Left, right: Right): TNarrow; export {};