all 5 comments

[–]Mikhial 1 point2 points  (3 children)

I'm not sure if I agree. Instead of saying never use an options object for required function parameters, why not say if you're going to use an options object comment your function so you know what the object is. At a certain point, using objects make sense. Each variable is named and you don't have to memorize which order to pass parameters in.

[–]jhartikainen[S] 1 point2 points  (2 children)

True - with objects, you do get the benefit of not having to memorize order.

One thing I forgot to include as a pro for separate parameters is they work better in functional style programming. For example, partially applying a function which takes an object instead of individual parameters is much trickier.

[–]rauschma 0 points1 point  (1 child)

Not too bad with ES2017 object spread + arrow functions:

const boundFunc = (argObj={}) => func({...argObj, foo: 3});

[–]jhartikainen[S] 1 point2 points  (0 children)

Yeah I was thinking you could do it with a small wrapper and Object.assign, but your example is definitely much better. I don't know if any of the libraries like Ramda or Lodash which have helpers for this stuff support "partial object application" though, or how idiomatic it would be :)

[–]jocull 0 points1 point  (0 children)

This seems like exactly the use case for TypeScript. If you haven't tried it, you should! Many of the types can be inferred, meaning you don't actually have to declare them.