UNPKG

@plurid/plurid-functions

Version:
33 lines (32 loc) 1.82 kB
/** * Based on https://stackoverflow.com/a/56416192/6639124 */ export declare type AllValues<T extends Record<PropertyKey, PropertyKey>> = { [P in keyof T]: { key: P; value: T[P]; }; }[keyof T]; export declare type InvertResult<T extends Record<PropertyKey, PropertyKey>> = { [P in AllValues<T>['value']]: Extract<AllValues<T>, { value: P; }>['key']; }; export declare type RecursivePartial<T> = { [P in keyof T]?: RecursivePartial<T[P]>; }; /** * Based on https://dev.to/pffigueiredo/typescript-utility-keyof-nested-object-2pa3 */ export declare type NestedKeyOf<ObjectType extends object> = { [Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object ? `${Key}` | `${Key}.${NestedKeyOf<ObjectType[Key]>}` : `${Key}`; }[keyof ObjectType & (string | number)]; /** * https://github.com/ghoullier/awesome-template-literal-types#dot-notation-string-type-safe */ export declare type ExtractPathsLogic<T, Key extends keyof T> = Key extends string ? T[Key] extends Record<string, any> ? `${Key}.${ExtractPathsLogic<T[Key], Exclude<keyof T[Key], keyof any[]>> & string}` | `${Key}.${Exclude<keyof T[Key], keyof any[]> & string}` : never : never; export declare type ExtractPathsRecursion<T> = ExtractPathsLogic<T, keyof T> | keyof T; export declare type ExtractPaths<T> = ExtractPathsRecursion<T> extends string | keyof T ? ExtractPathsRecursion<T> : keyof T; export declare type Split<S extends string, D extends string> = S extends `${infer T}${D}${infer U}` ? [T, ...Split<U, D>] : [S]; export declare type RootKey<S extends string> = Split<S, '.'>['length'] extends 1 ? true : false; export declare type RecursiveOmit<ObjectType extends object, Omits extends NestedKeyOf<ObjectType> | NestedKeyOf<ObjectType>[]> = any;