Make the crust. In a bowl, combine graham cracker crumbs, sugar, salt, and melted butter. Mix until it resembles damp sand. Press firmly into the bottom and up the sides of a 9-inch pie dish.
Use the bottom of a measuring cup to compact it well. Chill while you make the filling.
Toast the coconut. In a dry skillet over medium heat, toast the shredded coconut, stirring often, until golden and fragrant, 3–5 minutes. Transfer to a plate to cool.
Reserve a handful for topping.
Set up the custard base. In a medium saucepan off heat, whisk sugar, cornstarch, and salt. Add the coconut milk and whole milk, whisking until smooth. Whisk in the egg yolks until fully combined.
Cook the filling. Place the saucepan over medium heat.
Cook, whisking constantly, until the mixture thickens and bubbles, 6–9 minutes. Once it reaches a gentle boil, continue whisking for 1–2 minutes to cook out the starch taste.
Finish the custard. Remove from heat. Whisk in butter, vanilla extract, and coconut extract.
Fold in about 3/4 cup of the toasted coconut, saving the rest for garnish.
Cool slightly and assemble. Let the filling sit for 5 minutes, then pour it into the chilled crust. Smooth the top. Press a piece of plastic wrap directly onto the surface to prevent a skin.
Chill to set. Refrigerate for at least 4 hours, preferably overnight, until firm enough to slice cleanly.
Whip the topping. In a cold bowl, beat heavy cream, powdered sugar, and vanilla until soft-to-medium peaks form.
Don’t overbeat.
Finish and garnish. Remove the plastic wrap, spread or pipe the whipped cream over the pie, and sprinkle with the remaining toasted coconut.
Slice and serve. For neat slices, use a sharp knife wiped clean between cuts. Serve chilled.