38 lines
784 B
TypeScript

/**
* Toolkit - Type Helpers
*
* TypeScript utility types and helper functions.
*/
/**
* Make specific properties optional
*/
export type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
/**
* Make specific properties required
*/
export type RequiredBy<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
/**
* Deep partial (makes all nested properties optional)
*/
export type DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T;
/**
* Extract keys of a certain type
*/
export type KeysOfType<T, U> = {
[K in keyof T]: T[K] extends U ? K : never;
}[keyof T];
/**
* Pick properties by value type
*/
export type PickByValue<T, V> = Pick<
T,
{
[K in keyof T]: T[K] extends V ? K : never;
}[keyof T]
>;