text: Title: `TypedDict` with forward references do not work in argument conversion
  Body: If we use a `TypedDict` like below as a type hint, type conversion is done for key `x` but not for `y`. 
  
  ```python
  from typing import TypedDict
  
  class Example(TypedDict):
      x: int
      y: 'int'
  ```
  
  This is different compared to functions and methods where argument conversion is done both for `x` and `y` if we have `def example(x: int, y: 'int')`. The reason is that with `TypedDict` the annotation assigned to `y` by Python is `ForwardRef`, while with functions and methods we get the original string. Our conversion logic handles strings as aliases but doesn't know that to do with `ForwardRef`s.
  
  A simple fix for this issue is using `typing.get_type_hints` for getting types instead of accessing `__annotations__` like we currently do. That has a problem that using something like `x: 'int | float'` will cause an error with Python < 3.10. We just added support for such stringified types in arguments (#4711) and supporting them with `TypedDict` would be good as well. I guess we need to use `get_type_hints` first and then access `__annotations__` as a fall-back. Then we may get `ForwardRef`s and need to handle them as well.