tauri-settings
Version:
A user settings manager for Tauri inspired by electron-settings.
13 lines (12 loc) • 935 B
TypeScript
type PathImpl<T, K extends keyof T> = K extends string ? T[K] extends Record<string, any> ? T[K] extends ArrayLike<any> ? K | `${K}.${PathImpl<T[K], Exclude<keyof T[K], keyof any[]>>}` : K | `${K}.${PathImpl<T[K], keyof T[K]>}` : K : never;
export type Path<T> = PathImpl<T, keyof T> | keyof T;
export type PathValue<T, P extends Path<T>> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? Rest extends Path<T[K]> ? PathValue<T[K], Rest> : never : never : P extends keyof T ? T[P] : never;
/**
* @internal
*/
export declare function getDotNotation<SettingsSchema, K extends Path<SettingsSchema> = Path<SettingsSchema>>(settings: SettingsSchema, path: K): PathValue<SettingsSchema, K> | null;
/**
* @internal
*/
export declare function setDotNotation<SettingsSchema, K extends Path<SettingsSchema> = Path<SettingsSchema>>(settings: SettingsSchema, path: K, value: PathValue<SettingsSchema, K>): SettingsSchema;
export {};