Define a protocol[0] that declares it implements `__getitem__` and type annotate with that protocol. Whatever properties are needed inside the function can be described in other protocols.
These are similar to interfaces in C# or traits in Rust - you describe what the parameter _does_ instead of what it _is_.