Q: "Execute some ansible logic depending on the variable type."
A: The tests including mapping
work as expected. For example, the tasks below
    - set_fact:
        myvar:
          key1: value1
    - debug:
        msg: "{{ (myvar is mapping)|
                 ternary('is a dictionary', 'is something else') }}"
give
    msg: is a dictionary
Q: "Ansible - check variable type"
A: An option would be to discover the data type and dynamically include_tasks. For example, the tasks below
shell> cat tasks-int
- debug:
    msg: Processing integer {{ item }}
shell> cat tasks-str
- debug:
    msg: Processing string {{ item }}
shell> cat tasks-list
- debug:
    msg: Processing list {{ item }}
shell> cat tasks-dict
- debug:
    msg: Processing dictionary {{ item }}
with this playbook
- hosts: localhost
  vars:
    test:
    - 123
    - '123'
    - [a,b,c]
    - {key1: value1}
  tasks:
    - include_tasks: "tasks-{{ item|type_debug }}"
      loop: "{{ test }}"
give (abridged)
  msg: Processing integer 123
  msg: Processing string 123
  msg: Processing list ['a', 'b', 'c']
  msg: 'Processing dictionary {''key1'': ''value1''}'
If you want to simulate the switch statement create a dictionary
  case:
    int: tasks-int
    str: tasks-str
    list: tasks-list
    dict: tasks-dict
    default: tasks-default
and use it in the include
    - include_tasks: "{{ case[item|type_debug]|d(case.default) }}"
      loop: "{{ test }}"