compose
const compose = (
...funcs: ((...args: any[]) => void)[]
): ((...args: any[]) => void) => {
if (funcs.length === 0) return args => args
if (funcs.length === 1) return funcs[0]
return funcs.reduce((a, b) => (...args: any[]) => a(b(...args)))
}
compose