import { TableAddon, TableMiddleware } from "../TableProps"; export function useMiddleware( addons: TableAddon[], name: K ) { // infer value type type Value = T extends TableMiddleware ? V : never; type ValueType = Value; if (!addons || !addons.length) { return (initialValue: ValueType) => initialValue; } return (initialValue: ValueType) => addons .map(x => x[name]) .filter(Boolean) .reduce( (previous, middleware: TableMiddleware) => middleware(previous), initialValue ); }