import { trimAndRemoveDuplicatedWhitespacesFromString } from '@/utils/trim-and-remove-duplicated-whitespaces-from-string'; type OnlyStringPropertiesKey = Extract; export type StringPropertyKeys = { [K in OnlyStringPropertiesKey]: T[K] extends string | undefined ? K : never; }[OnlyStringPropertiesKey]; export const trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties = < T, TKeys extends StringPropertyKeys[], TExtract extends boolean = false, >( obj: T, keys: TKeys, extractKeys?: TExtract, ): TExtract extends true ? { [P in TKeys[number]]: T[P]; } : T => { return keys.reduce( (acc, key) => { const occurrence = obj[key]; if ( occurrence === undefined || typeof occurrence !== 'string' || occurrence === null ) { return acc; } return { ...acc, [key]: trimAndRemoveDuplicatedWhitespacesFromString(occurrence), }; }, extractKeys ? ({} as T) : obj, ); };