The deal, according to reports, is for $5 million. Descalso gets $1.5 million next year and $2.5 million in 2020. Chicago has a $3.5 million option for 2021 with a $1 million buyout.
He can also earn $250,000 annually in performance bonuses based on plate appearances: $50,000 each for 425, 450 and 475, and $100,000 for 500.
Descalso, 32, hit .237 with 22 doubles for Arizona last season. He set career bests with 13 home runs and 57 RBIs while playing in 138 games, his most since 2012.
He has batted .240 with 46 homers and 279 RBIs in 997 games in nine seasons with St. Louis, Colorado and the Diamondbacks.
Descalso has played every position except for center field and catcher.
The Associated Press contributed to this report.