Воспитанник тольяттинскогохоккея. В своём дебютном сезоне в КХЛ сыграл 8 матчей и сделал 1 голевую передачу. 27 сентября 2015 года забросил свою первую шайбу в шестом матче второго для себя сезона в КХЛ. В сезоне 2015/2016 сыграл 47 матчей забросил 4 шайбы и сделал 1 голевую передачу с показателем полезности −11.
8 апреля 2017 года дебютировал в НХЛ в последнем матче сезона 2016/17 против «Колорадо Эвеланш» (победа «Старз» 4:3 по буллитам) и провёл на льду 13:06.
По итогам сезона 2019/20 (второго для себя в НХЛ) стал лучшим снайпером команды «Даллас Старз», и единственным игроком преодолевшим отметку в 20 голов[1].
20 августа 2020 года набрал 5 очков (4+1) в матче против «Калгари Флэймз» (7:3) и стал первым российским хоккеистом в истории и первым игроком «Далласа», оформившим «покер» в плей-офф Кубка Стэнли[2]. Три шайбы Денис забросил во втором периоде. 31 августа 2020 года сделал три результативные передачи в матче против «Колорадо Эвеланш» (4:6). Всего в 27 матчах плей-офф набрал 17 очков (9+8).
В октябре 2020 года подписал новый двухлетний контракт с «Далласом», ежегодная зарплата составит $ 2,55 млн[3]. В сезоне 2020/21 сыграл 55 матчей и набрал 30 очков (12+18).
По завершении сезона 2022/23 подписал однолетний контракт с «Нэшвилл Предаторз» на сумму $ 850 тыс.[6] Перед сезоном 2023/24 был выставлен на драфт отказов и был отправлен в фарм-клуб «хищников» — «Милуоки Эдмиралс». Там он провёл 27 матчей, набрав 30 (12+18) очков, будучи одним из лидеров команды. Позже, он был вызван в стан основной команды, где дебютировал 6 января 2024 года в матче против его бывшей команды — «Далласа». В следующем матче против «Анахайма» отметился заброшенной шайбой, а после против «Далласа» и результативной передачей. Однако в последующих 11 встречах он не набрал ни единного балла и попал в запас.
8 марта 2024 года, в последний день дедлайна, был обменян в «Филадельфию Флайерз» на нападающего Уэйда Аллисона[7].
1 августа 2024 года подписал контракт на два года с московским ЦСКА.[8]