I have a function bus, which has an input format defined by @overload. Additionally, there are two other functions, apple and orange, each with their own inputs and specific arguments for bus. How can I obtain an annotation similar to what @overload provides without having to manually write the @overload for apple and orange? from typing import TypedDict, Union, overload, Unpack class DateDict(TypedDict): year: int month: int day: int class RangeDateDict(TypedDict): start_year: int start_month: int start_day: int end_year: int end_month: int end_day: int @overload def bus(**params: Unpack[DateDict]) -> None: ... @overload def bus(**params: Unpack[RangeDateDict]) -> None: ... def bus(**params: Union[DateDict, RangeDateDict]) -> None: print(f"bus called with: {params}") @overload def apple(name: str, **params: Unpack[DateDict]) -> str: ... @overload def apple(name: str, **params: Unpack[RangeDateDict]) -> str: ... def apple(name: str, **params: Union[DateDict, RangeDateDict]) -> str: # Do something bus(params) return name @overload def orange(name: str, **params: Union[DateDict]) -> str: ... @overload def orange(name: str, **params: Union[RangeDateDict]) -> str: ... def orange(name: str, params: Union[DateDict, RangeDateDict]) -> str: # Do something bus(params) return name if __name__ == "__main__": pass Continue reading...