export type DeepReadonly = { readonly [P in keyof T]: T[P] extends object ? DeepReadonly : T[P]; }; export type ExactOptional = { [K in keyof T]?: T[K]; }; export type SafeAccess = T[K] extends undefined ? T[K] | undefined : T[K]; export declare class TypeSafeObjectMerger { static merge, S extends Record>(target: T, source: S, options?: { overwriteUndefined?: boolean; validateTypes?: boolean; deep?: boolean; }): T & S; private static validateTypeCompatibility; private static isPlainObject; } export declare class SafePropertyAccess { static get, K extends keyof T>(obj: T, key: K, defaultValue?: T[K]): T[K] | typeof defaultValue; static getString>(obj: T, key: keyof T, defaultValue?: string): string; static getNumber>(obj: T, key: keyof T, defaultValue?: number): number; static getBoolean>(obj: T, key: keyof T, defaultValue?: boolean): boolean; static getArray, U = unknown>(obj: T, key: keyof T, defaultValue?: U[]): U[]; static getObject, U extends Record = Record>(obj: T, key: keyof T, defaultValue?: U): U; private static isValidObject; } export declare class TypeSafeConfigManager> { private readonly schema; private readonly config; constructor(schema: ConfigSchema, initialConfig?: ExactOptional); get(key: K): T[K]; set(key: K, value: T[K]): void; update(updates: ExactOptional): void; getAll(): DeepReadonly; private validateAndApplyDefaults; private validateConfigValue; private validateType; } export type ConfigType = 'string' | 'number' | 'boolean' | 'object' | 'array'; export interface ConfigSchemaEntry { type: ConfigType; required?: boolean; default?: T; validator?: (value: T) => boolean; description?: string; } export type ConfigSchema> = { [K in keyof T]: ConfigSchemaEntry; }; export declare class ExactOptionalUtils { static filterUndefined>(obj: ExactOptional): Partial; static mergeExactOptional>(...objects: ExactOptional[]): ExactOptional; static validateExactOptional>(obj: unknown, allowedKeys: (keyof T)[]): obj is ExactOptional; } export declare function deepClone(obj: T): T; export declare function partial any>(fn: T, ...partialArgs: Partial>): (...remainingArgs: any[]) => ReturnType; export declare function createFrozen>(obj: T): DeepReadonly; //# sourceMappingURL=type-helpers.d.ts.map