Open bandreetto opened 5 years ago
When the evolver passed to the evolve object is a curried function it is not resolving the type to the return of the curried function:
import R from 'ramda'; interface JobInfo { currentJob: string, previousJob?: string, } interface Person { name: string, job: JobInfo, } const developer: Person = { name: 'John Doe', job: { currentJob: 'Developer', } } const changeJob = R.curry( (newJob: string, job: JobInfo) => { return { currentJob: newJob, previousJob: job.currentJob, } }); const designer: Person = R.evolve({ job: changeJob('Designer'), }, developer); // Throws ts error
Although if you explicit the types in the evolve generics it works:
import R from 'ramda'; interface JobInfo { currentJob: string, previousJob?: string, } interface Person { name: string, job: JobInfo, } const developer: Person = { name: 'John Doe', job: { currentJob: 'Developer', } } const changeJob = R.curry( (newJob: string, job: JobInfo) => { return { currentJob: newJob, previousJob: job.currentJob, } }); const designer: Person = R.evolve<{ job: (job: JobInfo) => JobInfo }, Person>({ job: changeJob('Designer'), }, developer);
When the evolver passed to the evolve object is a curried function it is not resolving the type to the return of the curried function:
Although if you explicit the types in the evolve generics it works: