To make the cream filling whisk together egg yolks, half and half, and coconut milk in a medium saucepan over medium/low heat.
Once combined, add in sugar and corn starch, stirring constantly until the mixture thickens and comes to a light boil.
Remove from heat and mix in the shredded coconut and vanilla extract. Cover with plastic wrap and chill at least two hours.
To make the puff, combine the butter, water, coconut milk, and salt in a medium saucepan over medium heat. Allow all the butter to melt and bring the mixture to a boil.
As soon as the mixture begins to boil, reduce heat to medium-low and add in the flour.
Using a wooden spoon, mix thoroughly to incorporate the flour. Continue stirring until the dough starts to pull away from the sides and a thin film forms on the bottom of the pan (about three minutes).
Remove the mixture from heat and transfer to a large mixing bowl. Let the dough cool slightly.
Add in the eggs, one at a time, being sure to fully incorporate each egg before adding the next.
Once the dough comes together, transfer it to a piping bag.
Pipe onto a parchment-paper-lined baking sheet into 1½-inch (3 ¾ cm) mounds.
Smooth out any peaks/ridges cause by piping with a wet fingertip (this will ensure your puffs cook evenly and maintain a nice ball shape).
Then brush the dough with egg wash and place in preheated oven.
Bake for 15 minutes at 425˚F (220°C). Then, without opening the oven, reduce heat to 350˚ (180˚C) and bake for an additional 15 minutes.
Remove puffs from oven. Using the tip of a knife, cut a small “x” into the bottom of each puff and transfer (“x” side up) to a cooling rack.
Just before serving (or up to two hours in advance), pipe the cream filling into the cooled puffs. Sprinkle with powdered sugar.