@constl/bohr-db
Version:
Type-safe databases for OrbitDB.
24 lines • 1.45 kB
TypeScript
export type DBElements = number | boolean | string | {
[key: string]: DBElements;
} | Array<DBElements>;
export type DBElementsWithUndefined = number | boolean | string | {
[clef: string]: DBElements;
} | Array<DBElements> | undefined;
export type RecursivePartial<T> = {
[P in keyof T]?: T[P] extends object ? RecursivePartial<T[P]> : T[P];
};
export type ExtractKeys<T> = T extends object ? {
[K in keyof T & string]: K | (T[K] extends object ? `${K}/${ExtractKeys<T[K]>}` : K);
}[keyof T & string] : never;
export type ExtractKeysAsList<T> = T extends object ? {
[K in keyof T & string]: [
K
] | (T[K] extends object ? [K, ...ExtractKeysAsList<T[K]>] : [K]);
}[keyof T & string] : never;
export type GetValueFromKey<T, P extends ExtractKeys<T>> = P extends `${infer Key}/${infer Rest}` ? Key extends keyof T ? Rest extends ExtractKeys<T[Key]> ? GetValueFromKey<T[Key], Rest> : never : never : P extends keyof T ? T[P] : never;
export type GetValueFromKeyList<T, P extends ExtractKeysAsList<T>> = P extends [
infer Key,
...infer Rest
] ? Key extends keyof T ? Rest extends ExtractKeysAsList<T[Key]> ? GetValueFromKeyList<T[Key], Rest> : T[Key] : never : never;
export type GetValueFromNestedKey<T, K extends ExtractKeysAsList<T> | ExtractKeys<T>> = K extends ExtractKeys<T> ? GetValueFromKey<T, K> : K extends ExtractKeysAsList<T> ? GetValueFromKeyList<T, K> : never;
//# sourceMappingURL=types.d.ts.map