The 18-year-old scored twice in 15 appearances, mostly from the bench, last season, including the goal that relegated rivals Dundee United.
He spent the first half of the campaign on loan at Raith Rovers, netting once.
"We are looking forward to the continuation of his development over the next three years," manager Paul Hartley told the club website.
Dundee striker Craig Wighton has signed a new three-year contract, keeping him at Dens Park until the summer of 2019.