import { type TSchema, SchemaOptions } from '../schema/index'; import { type Assert } from '../helpers/index'; import { type TComputed } from '../computed/index'; import { type TNever } from '../never/index'; import { type TArray } from '../array/index'; import { type TIntersect } from '../intersect/index'; import { type TMappedResult, type TMappedKey } from '../mapped/index'; import { type TObject, type TProperties } from '../object/index'; import { type TUnion } from '../union/index'; import { type TRecursive } from '../recursive/index'; import { type TRef } from '../ref/index'; import { type TTuple } from '../tuple/index'; import { type TIntersectEvaluated } from '../intersect/index'; import { type TUnionEvaluated } from '../union/index'; import { type TIndexPropertyKeys } from './indexed-property-keys'; import { type TIndexFromMappedKey } from './indexed-from-mapped-key'; import { type TIndexFromMappedResult } from './indexed-from-mapped-result'; type TFromRest = (Types extends [infer Left extends TSchema, ...infer Right extends TSchema[]] ? TFromRest, TSchema>]> : Result); type TFromIntersectRest = (Types extends [infer Left extends TSchema, ...infer Right extends TSchema[]] ? Left extends TNever ? TFromIntersectRest : TFromIntersectRest : Result); type TFromIntersect = (TIntersectEvaluated>>); type TFromUnionRest = Types extends [infer Left extends TSchema, ...infer Right extends TSchema[]] ? Left extends TNever ? [] : TFromUnionRest : Result; type TFromUnion = (TUnionEvaluated>>); type TFromTuple = (Key extends keyof Types ? Types[Key] : Key extends '[number]' ? TUnionEvaluated : TNever); type TFromArray = (Key extends '[number]' ? Type : TNever); type AssertPropertyKey = Assert; type TFromProperty = (Key extends keyof Properties ? Properties[Key] : `${AssertPropertyKey}` extends `${AssertPropertyKey}` ? Properties[AssertPropertyKey] : TNever); export type TIndexFromPropertyKey = (Type extends TRecursive ? TIndexFromPropertyKey : Type extends TIntersect ? TFromIntersect : Type extends TUnion ? TFromUnion : Type extends TTuple ? TFromTuple : Type extends TArray ? TFromArray : Type extends TObject ? TFromProperty : TNever); export declare function IndexFromPropertyKey(type: Type, propertyKey: Key): TIndexFromPropertyKey; export type TIndexFromPropertyKeys = (PropertyKeys extends [infer Left extends PropertyKey, ...infer Right extends PropertyKey[]] ? TIndexFromPropertyKeys, TSchema>]> : Result); export declare function IndexFromPropertyKeys(type: Type, propertyKeys: [...PropertyKeys]): TIndexFromPropertyKeys; type FromSchema = (TUnionEvaluated>); declare function FromSchema(type: Type, propertyKeys: [...PropertyKeys]): FromSchema; export type TIndexFromComputed = (TComputed<'Index', [Type, Key]>); export declare function IndexFromComputed(type: Type, key: Key): TIndexFromComputed; export type TIndex = (FromSchema); /** `[Json]` Returns an Indexed property type for the given keys */ export declare function Index(type: Type, key: Key, options?: SchemaOptions): TIndexFromComputed; /** `[Json]` Returns an Indexed property type for the given keys */ export declare function Index(type: Type, key: Key, options?: SchemaOptions): TIndexFromComputed; /** `[Json]` Returns an Indexed property type for the given keys */ export declare function Index(type: Type, key: Key, options?: SchemaOptions): TIndexFromComputed; /** `[Json]` Returns an Indexed property type for the given keys */ export declare function Index(type: Type, mappedResult: MappedResult, options?: SchemaOptions): TIndexFromMappedResult; /** `[Json]` Returns an Indexed property type for the given keys */ export declare function Index(type: Type, mappedResult: MappedResult, options?: SchemaOptions): TIndexFromMappedResult; /** `[Json]` Returns an Indexed property type for the given keys */ export declare function Index(type: Type, mappedKey: MappedKey, options?: SchemaOptions): TIndexFromMappedKey; /** `[Json]` Returns an Indexed property type for the given keys */ export declare function Index>(T: Type, K: Key, options?: SchemaOptions): TIndex; /** `[Json]` Returns an Indexed property type for the given keys */ export declare function Index(type: Type, propertyKeys: readonly [...PropertyKeys], options?: SchemaOptions): TIndex; export {};