My implementation is slightly different and it works as I expected. I’m not an expert in either Python or Micro-controller programming, so there could be improvements to the code.

interrupt = 1
tim = machine.Timer(-1)

def enable_interrupt(timer):
    global interrupt
    interrupt = 1

def handle_pin_change(pin, value):
    pinConfig = pin_config_util.getThingByInputPin(pin)
    output_pin_id = pin_config_util.getOutputPinConfig(pinConfig.thing_id, pinConfig.thing_prop)
    # DO THE REAL WORK HERE

#THIS IS WHAT WE HOOK UP WITH PIN.IRQ
def debounce(pin):
    global interrupt
    if interrupt == 1 and pin.value() == 1:
        tim.init(period=300, mode=machine.Timer.ONE_SHOT, callback=lambda t:enable_interrupt(t))
        interrupt = 0
        handle_pin_change(pin, pin.value())