You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Cannot map over intersection of string with string literal (e.g., "a" & string) #23651
Related Issues:
maybe #12114 for mapped types in general
maybe #23592 for making me notice this
maybe #16386 because I always think everything would be fixed by absorption
maybe #9410 although back then these things were treated as never everywhere
The recent #23592 change allowing mapping over number and symbol keys caused some of my existing code to break, and the obvious fix for some of them was to restrict those instances where I really expected strings from keyof T to (keyof T) & string. But that doesn't work. It looks like "a" & string gets treated like never inside of a mapped type key set, but like "a" everywhere else. Absorption would fix this, but barring that, maybe some less aggressive simplification inside mapped types?
Workaround: Since TS2.8 it is possible to use Extract<T, U> instead of T & U in some instances. In this case it can reduce the intersection before the mapping: type X = { [K in Extract<'a',string>]: 1 } is equivalent to { a: 1 } as expected.
intersections are not aggressively reduced at the moment. there are some reduction that takes place when the intersection is used in a union (e.g. intersection of two literals go to never). in general we should be doing supertype reduction on intersections.
Activity
mhegazy commentedon Apr 24, 2018
intersections are not aggressively reduced at the moment. there are some reduction that takes place when the intersection is used in a union (e.g. intersection of two literals go to
never). in general we should be doing supertype reduction on intersections.mhegazy commentedon Apr 24, 2018
we should add support for reducing
string|number|enum & literal,enum & numbermhegazy commentedon Apr 24, 2018
Same issue as #9410
jcalz commentedon Apr 24, 2018
Is it the same issue? It seems related, but that one looks like it's fixed. Maybe whatever fixed that can be done inside mapped types as well?
mhegazy commentedon Apr 28, 2018
Should be fiexed by #23751