Il 26 giugno 2018 viene ceduto per 4,5 milioni di euro (più il 15% di una futura cessione) alla insieme a Davide Santon nell'ambito dell'operazione che porta Radja Nainggolan in nerazzurro. Esordisce con i giallorossi il 19 settembre seguente, a 19 anni, venendo schierato come titolare nella partita della fase a gironi di Champions League persa 3-0 contro il allo Stadio Santiago Bernabéu. Una settimana più tardi debutta in Serie A, subentrando al 67' a Javier Pastore nell'incontro vinto per 4-0 contro il . Nelle settimane successive riesce a trovare spazio con l'allenatore Di Francesco, e il 26 dicembre segna il suo primo gol in Serie A nella partita vinta 3-1 all'Olimpico contro il , valida per la 18ª giornata di campionato. Debutta in Coppa Italia il 14 gennaio 2019, disputando gli ultimi minuti della gara degli ottavi di finale contro la Virtus Entella, sua ex-squadra militante in Serie C. Il 12 febbraio seguente, in occasione della partita di andata degli ottavi di finale di Champions League vinta (2-1) contro il , realizza le sue prime due reti nelle coppe europee, diventando il più giovane calciatore italiano ad avere segnato una doppietta nella massima competizione continentale. Sotto la guida di Claudio Ranieri, subentrato a Di Francesco, viene schierato in prevalenza come ala destra. Termina la stagione con 36 presenze stagionali e 6 gol, di cui 4 realizzati in campionato, venendo insignito del Premio Lega Serie A come miglior giovane della stagione.