Because outerObj exists (it's not undefined) in objToDestructure, setting a default for it won't help in this case. Since it's an object, you can destructure field1 and field2 individually, and set a default for each of them:
Set a default empty object, and add a default value for each field:
const { outerObj:{ field1 = 22, field2 = 33} = {}} = objToDestructure;
Example:
const { outerObj: objToDestructure={
field1 = 22someVal:3, field2
= 33} =anotherVal:4,
{}} = outerObj:{}
}
console.log(field1, field2)
And you can also set a default for the outerObj (as you tried before):
const { outerObj: { field1, field2} = { field1:22, field2:33 }= 33} = {}} = objToDestructure
console.log(field1, field2)
Note: the difference between 1 and 2 is that if outerObj exists, the default in 2 won't be used. The defaults in 1 would be used as long as the individual properties don't exist.