Adding a special type (`Missing`) to a union to indicate that a field is not required would be inconsistent with every other use of `Union`. It breaks the mental model users have for `Union`, and it would require type checkers to introduce a bunch of special-case logic in multiple places where unions are used. Please don't do this.
The proposed `Required` annotation is consistent with existing annotations like `Final`, so it will be familiar to users and will work nicely with existing type checker implementations.
I'll also note that `NoReturn` within a union makes no sense. The `NoReturn` type is semantically equivalent to an empty union. It should never appear within a union along with other types. Pyright contains special logic to remove it from a union if it is combined with other types.
-- Eric Traut Contributor to Pyright and Pylance Microsoft Corp.