Установить свойство, когда значение равно Just

Я хотел бы установить свойство объекта при значении 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 ответ

Решение

Кажется твой 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')} являются предпочтительными представлениями этих "людей".

Другие вопросы по тегам