Allow negated types + F-bounded mapped types · Issue #18280 · microsoft/TypeScript (original) (raw)
Navigation Menu
- Explore
- Pricing
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Description
Edit: keyof
works as I thought; mapped types are just broken in interfaces. I also clarified a few things.
Allowing negated types and F-bounded mapped type variables would solve several issues:
- Subtraction types: Subtraction types #4183 - The proposed
A - B
could be encoded asA & !B
as per this proposal. - Mapped conditional types: Mapped conditional types #12424 - For key-based conditions, this + F-bounded mapped types would allow that to be solved without explicit support.
- Promises - Having negated types makes it possible to prevent thenables from being used as generic Promise parameters.
Here's my proposal:
- Allow negated types, using
!T
to represent the set of all types that do not conform toT
(i.e. not assignable toT
). This is pretty simple to digest. - Expand mapped types to allow the key variable to be F-bounded, like in
{[P in Keys<T, P>]: ...}
.
The first is sufficient to cover subtraction types and Promise type issues, and the other two make mapped conditional types possible.