38 lines
784 B
TypeScript
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]
|
|
>;
|