Make the cake: Preheat the oven to 350 degrees F. Coat two 9-inch round cake pans with cooking spray and dust with flour; set aside. Whisk the flour, ginger, baking powder, baking soda and salt in a medium bowl. Whisk the cream of coconut and milk in a small bowl. Beat the butter and granulated sugar in a large bowl with a mixer on medium-high speed until light and fluffy, 3 to 5 minutes. Beat in the eggs, one at a time, until combined. Add the vanilla and coconut extract and beat until combined. Reduce the mixer speed to low; beat in the flour mixture in three batches, alternating with the milk mixture and beginning and ending with flour, until combined.
Divide the batter between the prepared pans and spread evenly. Bake until the cakes are golden and a toothpick inserted into the centers comes out clean, about 40 minutes. Transfer to a rack and let cool 15 minutes in the pans, then invert onto the rack to cool completely.
Make the frosting: Spread the shredded coconut on a baking sheet and bake, stirring halfway through, until golden, 10 to 12 minutes. Let cool. Meanwhile, beat the cream cheese in a large bowl with a mixer on high speed until light and fluffy, about 3 minutes. Add the butter and beat until fluffy, about 3 more minutes. Reduce the mixer speed to low and gradually beat in the confectioners' sugar and coconut extract until combined. Increase the mixer speed to high and beat until light and fluffy, about 2 more minutes.
Assemble the cake: Put 1 cake layer on a cake stand or serving plate. Combine 1 heaping cup frosting with 1 cup of the toasted coconut; spread on the cake. Top with the other cake layer. Spread a thin layer of frosting on the top and sides of the cake (this is the crumb coat; it doesn't have to be perfect). Refrigerate until set, about 15 minutes. Spread the remaining frosting all over the cake; top with the remaining 1 cup toasted coconut.