type UndefinedProperties = { [P in keyof T]-?: undefined extends T[P] ? P : never; }[keyof T]; type OptionalUndefined = Partial>> & Pick>>; export function stripUndefined(value: T): OptionalUndefined { const ret = {} as T; for (const k in value) { if (value[k] !== undefined) { ret[k] = value[k]; } } return ret; }