text: Title: Dictionaries are not accepted as-is in argument conversion with unions containing TypedDicts
  Body: When executing my library, arguments get cast to the first matching type instead of the actual type of the input. I believe this is to do with how Robot handles annotations. Rather than investigating too much into this, I have created an example to show the unexpected behaviour.
  
  Please let me know if this is intentional.
  
  Issues:
  - arguments that do not match the type become `str`, see the `float` variable below
  - arguments that match the first type are cast to that type, you can see a `dict` being cast to `str`. Order A fails, Order B works as expected
  
  # Output from terminal
  
  When executing the robot file:
  
  ```
  robot TestSuite.robot
  ==============================================================================
  TestSuite
  ==============================================================================
  Foo                                                                   .......expected | None | <class 'NoneType'>
  order_a | None | <class 'NoneType'>
  order_b | None | <class 'NoneType'>
  expected | {'prop': 'bar'} | <class 'robot.utils.dotdict.DotDict'>
  order_a | {'prop': 'bar'} | <class 'str'> ### This should not be str
  order_b | {'prop': 'bar'} | <class 'robot.utils.dotdict.DotDict'>
  expected | foo | <class 'str'>
  order_a | foo | <class 'str'>
  order_b | foo | <class 'str'>
  expected | 4 | <class 'int'>
  order_a | 4 | <class 'int'>
  order_b | 4 | <class 'int'>
  expected | 2.0 | <class 'float'>
  order_a | 2.0 | <class 'str'> ### This should be float
  order_b | 2.0 | <class 'str'>  ### This should be float
  expected | {'prop': 'bar'} | <class 'dict'>
  order_a | {'prop': 'bar'} | <class 'str'> ### This should not be str
  order_b | {'prop': 'bar'} | <class 'dict'>
  Foo                                                                   | PASS |
  ------------------------------------------------------------------------------
  TestSuite                                                             | PASS |
  1 test, 1 passed, 0 failed
  ==============================================================================
  ```
  
  When exectuing the python file
  
  ```
  python3 test.py
  
  def types_order_a(self, var: str | MyDictType | None | int):
  def types_order_b(self, var: None | MyDictType | str | int):
  order_a | None | <class 'NoneType'>
  order_b | None | <class 'NoneType'>
  expected | None | <class 'NoneType'>
  order_a | {'prop': 'bar'} | <class 'dict'>
  order_b | {'prop': 'bar'} | <class 'dict'>
  expected | {'prop': 'bar'} | <class 'dict'>
  order_a | foo | <class 'str'>
  order_b | foo | <class 'str'>
  expected | foo | <class 'str'>
  order_a | 4 | <class 'int'>
  order_b | 4 | <class 'int'>
  expected | 4 | <class 'int'>
  order_a | 2.0 | <class 'float'>
  order_b | 2.0 | <class 'float'>
  expected | 2.0 | <class 'float'>
  ```
  
  # Files
  
  ## Library: CustomLibrary.py
  
  ```py
  
  from typing import TypedDict
  from robot.api.logger import console
  
  
  class MyDictType(TypedDict):
      prop: str
  
  
  class CustomLibrary:
      def print_signatures(self):
          console("def types_order_a(self, var: str | MyDictType | None | int):")
          console("def types_order_b(self, var: None | MyDictType | str | int):")
  
      def types_order_a(self, var: str | MyDictType | None | int):
          console(f"order_a | {var} | {type(var)}")
  
      def types_order_b(self, var: MyDictType | str | None | int):
          console(f"order_b | {var} | {type(var)}")
  
      def no_types(self, var):
          console(f"expected | {var} | {type(var)}")
  
  
  
  ```
  
  ## Robot: TestSuite.robot
  
  ```robot
  
  *** Settings ***
  Library     ./CustomLibrary.py
  
  
  *** Test Cases ***
  Foo
      ${var1}=    Evaluate    None
      # Gets cast to a string for order A but not order B
      ${var2}=    Create Dictionary    prop=bar
      ${var3}=    Set Variable    foo
      ${var4}=    Set Variable    ${4}
      # Gets cast to a string because there is no float type in the function
      ${var5}=    Set Variable    ${2.0}
      # Dictionary that matches MyDictType
      ${var6}=    Evaluate    {"prop":"bar"}
  
      ${list}=    Create List    ${var1}    ${var2}    ${var3}    ${var4}    ${var5}    ${var6}
      FOR    ${item}    IN    @{list}
          CustomLibrary.No Types    ${item}
          CustomLibrary.Types Order A    ${item}
          CustomLibrary.Types Order B    ${item}
      END
  
  
  ```
  
  ## Python Runner: test.py
  
  ```py
  
  from CustomLibrary import CustomLibrary
  
  lib = CustomLibrary()
  
  var1 = None
  var2 = {"prop": "bar"}
  var3 = "foo"
  var4 = 4
  var5 = 2.0
  
  
  lib.print_signatures()
  
  inputs = [var1, var2, var3, var4, var5]
  
  for input in inputs:
      lib.types_order_a(input)
      lib.types_order_b(input)
      lib.no_types(input)
  
  
  ```
  