Technically this is something that TypeScript supports with conditional types, Exclude, and intersections (this is not my own example).
https://www.typescriptlang.org/play?#code/C4TwDgpgBAcg9sAggHkQGigFQHxQLxQCiAHgMYA2ArgCYTKYaLYBQzAZpQHanACWcnKJzgxKAWwBGEAE71sACmHAYALixQAZLAQpO4qdIw4AlFADeUaRGCVpgpTADcUAL6thoyTPkAiABIQ5ORwPsaOzB763gBMYVBQAPQJUIjSAObiEJzAUHBsUKCQUADkel7SxVC8AM5CCFAAhtXVvGmcDRLk0MBwUGAN0g1i1jK5+YXQpRAAbjLFAHRAA
_______________________________________________
Typing-sig mailing list -- typing-sig@python.org
To unsubscribe send an email to typing-sig-leave@python.org
https://mail.python.org/mailman3/lists/typing-sig.python.org/
Member address: guido@python.org