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