Preheat oven to 350°F (175°C). Grease and flour three 9-inch round cake pans, and line the bottoms with parchment paper.
In a medium bowl, whisk together flour, baking powder, baking soda, and salt. Set aside.
In a large bowl, beat butter and sugar for about 3 minutes, until light and fluffy.
Add eggs one at a time, beating well after each addition. Mix in coconut extract and vanilla extract.
Add the dry ingredients and coconut milk alternately in three additions, starting and ending with dry ingredients. Mix just until combined.
Gently fold in sour cream and shredded coconut using a spatula. Do not overmix.
Divide batter evenly between the prepared pans. Bake for 25–28 minutes, or until a toothpick inserted in the center comes out clean.
Cool cakes in pans for 10 minutes, then turn out onto a wire rack and cool completely before frosting.
To make frosting, beat cream cheese and butter until smooth and creamy.
Gradually add powdered sugar, then mix in coconut extract.
Fold in 1 cup shredded coconut (for filling).
Spread frosting between layers and over the top and sides of the cake.
Press toasted coconut onto the outside of the cake for decoration.
Chill for 20–30 minutes before slicing for clean layers.