export type ArrayElement = ArrType extends ReadonlyArray ? ElementType : never; export type ExcludeNull = T extends null ? never : T; export type ExcludeUndefined = T extends undefined ? never : T; export type KeysOfObjectOrNull = keyof ExcludeNull; /** Combines members of an intersection into a readable type. */ // https://twitter.com/mattpocockuk/status/1622730173446557697?s=20&t=NdpAcmEFXY01xkqU3KO0Mg export type Evaluate = { [key in keyof Type]: Type[key] } & unknown // Keeps in the object type only those properties that have the provided type (e.g only numbers) export type PickByType = Record< {[K in keyof T]: T[K] extends X ? K : never}[keyof T], X >;