import { type StaticType, type StaticDirection } from './static.mjs'; import { type TSchema, type TTupleOptions } from './schema.mjs'; import { type TArray } from './array.mjs'; import { type TOptional } from './_optional.mjs'; import { type TProperties } from './properties.mjs'; import { type TImmutable } from './_immutable.mjs'; import { type TReadonly } from './_readonly.mjs'; import { type TRest } from './rest.mjs'; type StaticLast = (Type extends TRest ? RestType extends TArray ? [...Result, ...TStaticElement[0][]] : [...Result, never] : [...Result, ...TStaticElement]); type TStaticElement, Result extends [unknown?] = ([ IsReadonly, IsOptional ] extends [true, true] ? [Readonly?] : [ IsReadonly, IsOptional ] extends [false, true] ? [Inferred?] : [ IsReadonly, IsOptional ] extends [true, false] ? [Readonly] : [ Inferred ])> = Result; export type TStaticElements = (Types extends [infer Last extends TSchema] ? StaticLast : Types extends [infer Left extends TSchema, ...infer Right extends TSchema[]] ? TStaticElements]> : Result); export type StaticTuple, Result extends readonly unknown[] = (Tuple extends TImmutable ? readonly [...Elements] : Elements)> = Result; /** Represents a Tuple type. */ export interface TTuple extends TSchema { '~kind': 'Tuple'; type: 'array'; additionalItems: false; items: Types; minItems: Types['length']; } /** Creates a Tuple type. */ export declare function Tuple(types: [...Types], options?: TTupleOptions): TTuple; /** Returns true if the given value is TTuple. */ export declare function IsTuple(value: unknown): value is TTuple; /** Extracts options from a TTuple. */ export declare function TupleOptions(type: TTuple): TTupleOptions; export {};