interface Interactive { default: T, hover?: T, clicked?: T, disabled?: T, } export function interactive(base: T, modifications: Partial>): Interactive { const interactiveObj: Interactive = { default: base, }; if (modifications.hover !== undefined) { interactiveObj.hover = { ...base, ...modifications.hover }; } if (modifications.clicked !== undefined) { interactiveObj.clicked = { ...base, ...modifications.clicked }; } if (modifications.disabled !== undefined) { interactiveObj.disabled = { ...base, ...modifications.disabled }; } return interactiveObj; }