Calhanoglu's new contract will see him don the Nerazzurri jersey until June 2024.
Reports are that Calhanoglu has signed a €5 million per year ($5.9 million) deal, which includes another €1 million ($1.2 million) in performance bonuses.
After intense talks with Milan, the former Bayer Leverkusen forward wanted to settle at €5 million, a deal that Milan were not willing to satisfy.
Calhanoglu could be followed out of AC Milan by Gianluigi Donnarumma, who is set to complete a move to French giants Paris Saint-Germain.
Having featured 172 times for Milan since signing from Bayer Leverkusen for €24 million in 2017 Calhanoglu will now join the Serie A champions.