import { type TUnreachable } from '../../system/unreachable/index.mjs'; import { Memory } from '../../system/memory/index.mjs'; import { type TSchema } from '../types/schema.mjs'; import { type TArray } from '../types/array.mjs'; import { type TUnknown } from '../types/unknown.mjs'; import { type TProperties } from '../types/properties.mjs'; import { type TTuple } from '../types/tuple.mjs'; import { type TExtendsLeft } from './extends_left.mjs'; import { type TUnion } from '../types/union.mjs'; import { type TInfer } from '../types/infer.mjs'; import { type TRest } from '../types/rest.mjs'; import * as Result from './result.mjs'; export interface TInferable { '~kind': 'Inferrable'; name: Name; type: Type; } export declare function Inferrable(name: Name, type: Type): never; export declare function IsInferable(value: unknown): value is TInferable; export type TTryRestInferable ? RestType extends TInfer ? Type extends TArray ? TInferable : Type extends TUnknown ? TInferable : undefined : TUnreachable : undefined)> = Result; export declare function TryRestInferable(type: Type): TTryRestInferable; export type TTryInferable ? TInferable : undefined)> = Result; export declare function TryInferable(type: Type): TTryInferable; type TryInferResults = (Rest extends [infer Head extends TSchema, ...infer Tail extends TSchema[]] ? TExtendsLeft<{}, Head, Right> extends Result.TExtendsTrueLike ? TryInferResults : undefined : Result); declare function TryInferResults(rest: [...Rest], right: Right): TryInferResults; export type TInferTupleResult> = (Results extends [...infer Results extends TSchema[]] ? Result.TExtendsTrue; }>> : Result.TExtendsFalse); export declare function InferTupleResult(inferred: Inferred, name: Name, left: Left, right: Right): TInferTupleResult; export type TInferUnionResult> = (Results extends [...infer Results extends TSchema[]] ? Result.TExtendsTrue; }>> : Result.TExtendsFalse); export declare function InferUnionResult(inferred: Inferred, name: Name, left: Left, right: Right): TInferUnionResult; export {};