With the victory, the 24-year-old American -- playing in the British Open for the first time -- captured his first Claret Jug and second major championship in two years. Morikawa won last year's PGA Championship at Harding Park in what was also his first appearance in that event.
Morikawa, who moved to No. 3 in the world after his triumph, played the final 31 holes at the course off Sandwich Bay without a bogey. Entering the final round one shot back of the lead, he closed with a 4-under 66 for a two-shot win over Spieth.
"This is by far one of the best moments of my life," said Morikawa, who becomes the first player since Bobby Jones in 1926 to win two major titles in eight or fewer starts.
Morikawa finished the tournament at 15-under 265, which is the lowest score in the 15 times the British Open has been held at Royal St. George's. He now has five victories in his two years since turning pro.
Oosthuizen, attempting to shake off runner-up finishes in the past two major tournaments, finished each of the first three rounds atop the leaderboard, but he lost the lead with a bunker-to-bunker bogey on the par-5 seventh hole.
The South Africa native was four shots behind Morikawa at the turn and couldn't catch up, ending the day at 1-over par and 11-under 269 for the tournament. Oosthuizen finished in a tie for third with last month's U.S. Open champion Jon Rahm.
Spieth, meanwhile, shot a fourth-round 66 to end at 13-under 267. He carded four birdies and an eagle on the seventh hole to go with two bogeys on the front nine.
Dylan Frittelli was at 9-under par for the tournament to finish fifth. Brooks Koepka and Mackenzie Hughes tied for sixth at 8-under 272.
Top-ranked Dustin Johnson was among the four-man group tied for eighth at 7-under 273. Defending British Open champion Shane Lowry, who won the 2019 event before the 2020 tournament was canceled due to the COVID-19 pandemic, finished in a three-way tie for 12th at 6-under par.
Bryson DeChambeau closed with a 5-under 65 for his best round of the tournament. He shot in the 70s in each of his first three rounds, ending at 2-under 278 and tied for 33rd.