Установить свойство, когда значение равно Just - PullRequest
0 голосов
/ 05 декабря 2018

Я хотел бы установить свойство объекта, когда значение равно Just, и не устанавливать свойство, когда значение равно Nothing.Однако, если значением является Nothing, возвращаемый объект становится Nothing.

let person = {name: 'Franz'}
const address = getAddress(response) // getAddress returns Maybe

// person will be Nothing if address is Nothing 
person = S.map(R.assoc('address', R.__, person))(address)

1 Ответ

0 голосов
/ 05 декабря 2018

Кажется, ваш тип Person выглядит примерно так:

Person = { name :: String, (address :: Address)? }

Если это вообще возможно, я рекомендую избегать полей null, undefined и необязательных записей, поскольку все они являются источникамиошибок.Я предлагаю что-то вроде этого:

//    person :: Person
const person = {name: 'Franz', address: S.Nothing};

//    address :: Maybe Address
const address = getAddress (response);

//    person$ :: Person
const person$ = R.assoc ('address') (address) (person);

Если по какой-то причине у вас должно быть дополнительное поле address в этом случае, вы можете использовать S.maybe:

//    person :: Person
const person = {name: 'Franz'}

//    address :: Maybe Address
const address = getAddress (response);

//    person$ :: Person
const person$ = S.maybe (person)
                        (address => R.assoc ('address') (address) (person))
                        (address);

Результат будет либо {name: 'Franz'}, либо что-то вроде {name: 'Franz', address: 'Frankfurter Allee 42'}.Как я уже говорил, {name: 'Franz', address: S.Nothing} и {name: 'Franz', address: S.Just ('Frankfurter Allee 42')} являются предпочтительными представлениями этих «людей».

...