import type { ResourceDict } from "./resources";
type Join<A extends string, B extends string> = `${A}.${B}`;
type ExtractParams<S extends string> = S extends `${string}{${infer K}}${infer R}` ? (K extends "" ? Record<never, never> : {
    [P in K]: string | number;
}) & ExtractParams<R> : Record<never, never>;
type NamespaceKeys<N extends keyof ResourceDict> = keyof ResourceDict[N];
export type FullKey = {
    [N in keyof ResourceDict]: Join<N & string, NamespaceKeys<N> & string>;
}[keyof ResourceDict];
export type ParamsFor<K extends string> = K extends `${infer N}.${infer Key}` ? N extends keyof ResourceDict ? Key extends keyof ResourceDict[N] ? ExtractParams<ResourceDict[N][Key] & string> : Record<never, never> : Record<never, never> : Record<never, never>;
export type Namespace = keyof ResourceDict;
export type Keys<N extends Namespace> = keyof ResourceDict[N] & string;
export {};
