Swoją piłkarską karierę rozpoczynał w Niemczance w Niemczy, następnie był członkiem Dziewiątki Dzierżoniów (2006[1]–2011) i Lechii Dzierżoniów, w której barwach w wieku 17 lat zadebiutował w III lidze[2]. W 2012 przeszedł do Zagłębia Lubin, gdzie rok później zaliczył debiut w Ekstraklasie[3].

W sierpniu 2016 został sprzedany za kwotę 500 tys. euro do Cracovii, z którą podpisał czteroletni kontrakt[4]. W drużynie Pasów pierwszy mecz rozegrał 8 września 2016 przeciwko Lechii Gdańsk, wchodząc na boisko w 71. minucie. Łącznie dla krakowskiego zespołu rozegrał 65 spotkań.

Na początku czerwca 2018 przeszedł za kwotę 4 mln euro do Genoi, występującej we włoskiej Serie A[5]. W debiutanckim sparingu przeciwko Val Stubai zdobył pięć bramek i zaliczył asystę, natomiast w pierwszym meczu Pucharu Włoch trafił do bramki czterokrotnie, wygrywając tym samym spotkanie 1/32 finału z Lecce[6][7]. 23 września 2018 stał się pierwszym po Szewczence piłkarzem, który strzelił pięć bramek w pierwszych czterech meczach Serie A.

23 stycznia 2019 został zawodnikiem A.C. Milan, wiążąc się kontraktem ważnym do 30 czerwca 2023[8]. W wyniku tego transferu opiewającego na 35 mln euro został najdroższym polskim zawodnikiem w historii[9][10].

26 stycznia zadebiutował w barwach A.C. Milan w ligowym spotkaniu przeciwko SSC Napoli, wchodząc na boisko w 72. minucie meczu za Patricka Cutrone[11]. Trzy dni później po raz pierwszy wystąpił w pierwszym składzie A.C. Milan w ćwierćfinale Pucharu Włoch przeciwko SSC Napoli, zdobywając dwie bramki, które przesądziły o wyniku spotkania (2:0). W sezonie 2018/2019 został królem strzelców Pucharu Włoch zdobywając 8 bramek w 5 meczach tych rozgrywek[12].piatek