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