Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

R.evolve is not deriving type from curried evolver #438

Open
bandreetto opened this issue May 17, 2019 · 0 comments
Open

R.evolve is not deriving type from curried evolver #438

bandreetto opened this issue May 17, 2019 · 0 comments

Comments

@bandreetto
Copy link

bandreetto commented May 17, 2019

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);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant