This strong start by the first-place Minnesota Twins has been fueled by an ample supply of power.

Byron Buxton and Jason Castro each hit two-run homers, just the cushion that was needed to withstand a late surge by the Los Angeles Angels.

"Just put good swings on the ball," Buxton said, "and the ball will do what it does."

Twins reliever Mike Morin hit former teammate Mike Trout with a bases-loaded pitch that forced in a run in the ninth inning before retiring Shohei Ohtani to end the game on a groundout and preserve an 8-7 victory over the Angels on Wednesday.

"I thought we were going to sneak away with it," Angels starter Trevor Cahill said, "but give the Twins credit. They stopped us at the end."

Jonathan Lucroy had an RBI double and David Fletcher drove in a run with a single against Trevor Hildenberger in the three-run ninth, before the AL Central leaders turned to Morin for the final two outs and his first save this season. Morin gave up two of the season-high 18 hits by the Angels and plunked Trout on the shoulder.

Ehire Adrianza added a two-run double for the Twins, who took the three-game set from the Angels and improved their series record this season to 8-4-2. They've won 10 of their last 15 games, and they're 24-6 when scoring four or more runs. The Twins have 76 home runs in 42 games, the third-most in the majors.

"We just have a knack for hitting them, and it's good to have," Twins starter Jake Odorizzi said. "You're never out of a game and can get a lead. We needed every bit of that lead. It's going to be a good year watching these guys keep progressing through these at bats."

Odorizzi (6-2) had his scoreless streak stopped at 22 innings, the fifth-longest in team history, when Tommy La Stella took him deep in the third for his team-leading 11th homer. Lucroy tacked on a two-run shot in the sixth, which Odorizzi did not finish for the first time in four starts. He gave up nine hits and three runs in 5 1/3 innings, but this Twins lineup that's suddenly stacked with sluggers produced enough support. The Twins began the day with an .823 OPS, second-best in the majors.

"You're going to have to win games ugly and clean," Odorizzi said. "Whatever they are, we're going to have to win them one way or another to make the postseason. Today it got interesting, and we still won."

Cahill (2-4) bore the brunt of that, allowing six hits and six runs in 4 1/3 innings. He failed to finish the fifth for the fifth time in his last six turns, and the major league leader in home runs allowed has now been taken deep 14 times after the drive to left-center by Buxton in the fifth .

Castro homered off Luke Bard , his sixth of the season and the most uplifting hit of the afternoon for the Twins given the injury to fellow catcher Mitch Garver . The Twins lead the major leagues with 17 home runs and 40 RBIs from the catching position.

The Angels went 3 for 17 with runners in scoring position, leaving 14 men on base. Blake Parker, their closer last season, struck out Ohtani with two runners on to finish the eighth. Trevor May, who has stranded all 10 runners he's inherited this season, relieved Odorizzi and ended the sixth with a fly out by La Stella to leave two on.

THE ANGELS' GREATEST HITS

La Stella went 4 for 5, his 10th multi-hit game of the season, and is batting .367 over his last 20 games. Lucroy drove in three runs, raising his career average against the Twins to .343 with 31 RBIs in 140 at-bats. Brian Goodwin tied his career best with four hits.

STRUGGLING SIDEARMER

Hildenberger, who has allowed 13 runs in 6 1/3 innings over his last eight games, was sent to Triple-A Rochester after the game. The right-hander started the season with 11 scoreless appearances, spanning 7 2/3 innings.

MULTI-PURPOSE

Ohtani and his two-way skills have some company in the clubhouse. The Angels promoted first baseman Jared Walsh from Triple-A Salt Lake, filling the roster spot vacated by Justin Bour's demotion, and Walsh marked his major league debut with three singles. Walsh, who like Ohtani is a pitcher and a hitter, was a 39th-round draft pick in 2015. He batted .302 with 10 homers and 26 RBIs in 37 games for Salt Lake and allowed two runs in five innings as a reliever.

"Pretty much everything I hoped it would be," Walsh said of his debut.

TRAINER'S ROOM

Angels: LF Justin Upton, who has yet to play this season because of a turf toe injury on his left foot, has begun throwing and swinging in the batting cage. He has yet to be cleared for running on the ground, only on a special anti-gravity treadmill, Ausmus said.

Twins: DH Nelson Cruz was held out for the third straight game because of a sore left wrist, but manager Rocco Baldelli said he was available to play if needed.

Twins: RHP Michael Pineda (2-3, 5.85 ERA) takes his turn on Thursday night in Seattle when the Twins start a four-game series against his original team the Mariners, who send RHP Erik Swanson (1-4, 6.35 ERA) to the mound.