I was trying to write a click option argument with type=click.Choice((“North”, “South”, “West”, “East”)) and I also like to annotate the function itself for documentation (even though I call it without passing arguments). Something like the the following..

@click.command()
@click.option(“--direction”, type=click.Choice((“North”, “South”, “West”, “East”)), default=“North”)
def main(direction: “North” | “South” | “West” | “East” = “North”) -> None:
    print(direction) 

On 5 Feb 2022, at 11:21 PM, Abdulla Al Kathiri <alkathiri.abdulla@gmail.com> wrote:

Hello all,

Why can’t we use the literals directly as types? For example,

x: Literal[1, 2, 3] = 3
name: Literal[“John”] | None = “John"

Become ….

x: 1 | 2 | 3 = 3
name: “John” | None = “John"


def open(file: Path | str, mode: “w” | “a” = “w”): …

Best Regards,

Abdulla