Python
from typing import overload, Union, Literal

class Router:
    @overload
    def route(self, name: Literal["main"]) -> None:
        ...

    @overload
    def route(self, name: Literal["edit"], id: int) -> None:
        ...

    def route(self, name: Literal["main"] | Literal["edit"], id: int | None = None) -> None:
        if name == "main":
            print("main")
        if name == "edit":
            if not id:
                print( "error")
            print(id)

# Usage
router = Router()
router.route("main")
router.route("edit", 5)
router.route("main", 6) # Linter error
main
5
main