react-classnaming
Version:
Tools to establish CSS classes as an explicit abstraction layer and to handle it as an interface between React and CSSStyleDeclaration
32 lines (31 loc) • 2.39 kB
TypeScript
export declare type Ever<T, V, D = EmptyObject> = [T] extends [never] ? D : V;
export declare type Ever0<T, D = never> = [T] extends [never] ? D : T;
export declare type EmptyObject = Record<never, never>;
export declare type AnyObject = Record<string, any>;
export declare type Falsy = undefined | null | false | 0 | "";
/** @see https://stackoverflow.com/a/49579497/9412937 */
export declare type RequiredKeys<T> = {
[K in keyof T]-?: ({} extends {
[P in K]: T[K];
} ? never : K);
}[keyof T];
export declare type BoolDict = Record<string, boolean>;
/** @see https://github.com/microsoft/TypeScript/issues/31153#issuecomment-487872268 */
export declare type KnownKeys<T> = {
[K in keyof T]: string extends K ? never : number extends K ? never : K;
} extends {
[_ in keyof T]: infer U;
} ? U : never;
export declare type OmitIndexed<T> = Pick<T, KnownKeys<T> & keyof T>;
export declare type Primitive = undefined | null | boolean | number | string | symbol | bigint;
export declare type Strip<Str extends string, Delimiter extends string, toNever extends boolean = false> = Str extends `${infer Lead}${Delimiter}${string}` ? Lead : toNever extends false ? Str : never;
export declare type Cut<Str extends string, Delimiter extends string, toNever extends boolean = false> = Str extends `${string}${Delimiter}${infer Back}` ? Back : toNever extends false ? Str : never;
export declare type NoSubString<Str extends string, Sub extends string> = Exclude<Str, `${string}${Sub}${string}`>;
export declare type Subest<Base, Extendent> = string extends keyof Base ? Extendent : Base extends Extendent ? Extendent : Base;
export declare type Extends<T, V, X> = [T extends V ? true : never] extends [never] ? never : X;
export declare type PartDeep<T> = Exclude<T, AnyObject> | Extract<T, any[]> | (T extends any[] ? never : T extends AnyObject ? Ever<keyof Extract<Exclude<T, any[]>, AnyObject>, {
[K in keyof Extract<Exclude<T, any[]>, AnyObject>]?: PartDeep<Extract<Exclude<T, any[]>, AnyObject>[K]>;
}, never> : never);
export declare type KeyOf<T> = [T] extends [never] ? never : T extends AnyObject ? Extract<keyof T, string> : never;
/** @see https://stackoverflow.com/a/50375286/10325032 */
export declare type UnionToIntersection<Union> = (Union extends any ? (argument: Union) => void : never) extends (argument: infer Intersection) => void ? Intersection : never;