import type { TSchema } from '../schema/index'; import type { Assert, Ensure } from '../helpers/index'; import type { TMappedResult } from '../mapped/index'; import type { SchemaOptions } from '../schema/index'; import { type TLiteral, type TLiteralValue } from '../literal/index'; import { type TNumber } from '../number/index'; import { TComputed } from '../computed/index'; import { type TRef } from '../ref/index'; import { type TKeyOfPropertyKeys } from './keyof-property-keys'; import { type TUnionEvaluated } from '../union/index'; import { type TKeyOfFromMappedResult } from './keyof-from-mapped-result'; type TFromComputed = Ensure]>>; type TFromRef = Ensure]>>; /** `[Internal]` Used by KeyOfFromMappedResult */ export type TKeyOfFromType, PropertyKeyTypes extends TSchema[] = TKeyOfPropertyKeysToRest, Result = TUnionEvaluated> = Ensure; export type TKeyOfPropertyKeysToRest = (PropertyKeys extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? L extends '[number]' ? TKeyOfPropertyKeysToRest : TKeyOfPropertyKeysToRest>]> : Result); export declare function KeyOfPropertyKeysToRest(propertyKeys: [...PropertyKeys]): TKeyOfPropertyKeysToRest; export type TKeyOf = (Type extends TComputed ? TFromComputed : Type extends TRef ? TFromRef : Type extends TMappedResult ? TKeyOfFromMappedResult : TKeyOfFromType); /** `[Json]` Creates a KeyOf type */ export declare function KeyOf(type: Type, options?: SchemaOptions): TKeyOf; export {};