Preheat your oven to 350°F (175°C). Lightly grease a 9x9-inch baking pan or coat with non-stick spray. For easy removal, consider lining the pan with parchment paper, leaving some overhang on two sides as handles.
In a medium bowl, whisk together the flour, brown sugar, granulated sugar, cinnamon, and salt for the streusel topping. Add the cold cubed butter and use your fingers or a pastry cutter to work the mixture until it resembles coarse crumbs with pea-sized butter pieces. Fold in the chopped nuts if using, then refrigerate while preparing the cake batter.
In a large bowl, whisk together the flour, sugar, baking soda, baking powder, salt, cinnamon, nutmeg, cloves, and ginger for the cake.
In a separate bowl, whisk together the pumpkin puree, oil, milk, eggs, and vanilla extract until smooth.
Gradually add the wet ingredients to the dry ingredients, folding gently with a spatula until just combined. Be careful not to overmix – a few small lumps are actually preferable.
Pour the batter into your prepared baking pan, spreading it evenly to the corners. Remove the streusel topping from the refrigerator and sprinkle it evenly over the batter, gently pressing it into the surface.
Bake in the preheated oven for 45-50 minutes, or until a toothpick inserted into the center comes out clean or with a few moist crumbs.
Allow the cake to cool in the pan for 15 minutes, then use the parchment paper handles to lift it out and transfer to a wire rack to cool completely.
If adding the glaze, whisk together the powdered sugar, milk, and vanilla until smooth. Drizzle over the cooled cake in a decorative pattern. For a bakery-style finish, drizzle the glaze while the cake is still slightly warm so it melts slightly into the streusel.