Intersection type in template literal is not reduced to its bare type #57918
Labels
Awaiting More Feedback
This means we'd like to hear from more people who would be helped by this feature
Suggestion
An idea for TypeScript
π Search Terms
template literal, intersection type
π Version & Regression Information
const
template literalΒ #54648β― Playground Link
https://www.typescriptlang.org/play?#code/C4TwDgpgBAysBOBLAdgcwCrggHgNJQgA9gJkATAZygoRVQD4oBeKfIk8qmpNKAMigoAZhHhQAqgCgAkAH4oAbVwAaCQF0CxUpUXjVuNTPkBvAL6aOO44oAKg5FAAGAEmO5TjtQC4oAV2QA1sgA9gDuDqZGUADkJAC2YAA2AIYkADKIJPDJidEyPtHcdBlZOXnSBUVo5T7IEABuopKSoJBQAEoAjMywtGiYkNhVDJIA9KNQkwB6si1YHQBMPXA8GFhDfaj8UNbJPt2m9GMT07Nzbe0AzMubAzjRyQBGAMbRR+OTUDPn0O0ALDdVndsA8XtFtrt9lBDsdPt8fh0AKyAujAlzGZC+OKPUQed4nL6zVq-ABsKP663RmOxuMcEKgeygB3xcLOUCAA
π» Code
π Actual behavior
π Expected behavior
Additional information about the issue
I mentioned this in #54648 after it is closed. It is limiting our ability to write the types that works with string literal and template literal and there is no alternative way to workaround that.
I'm suggesting this issue should be fixed and restore the behavior in 5.0.
Here is my original comment:
This behavior is causing a few types in
type-plus
to fail (e.g.IsTemplateLiteral
,IsStringLiteral
,Omit
,IsNegative
, etc) unional/type-plus#429.In term of soundness, IMO it does make sense that
${string & { a: 1 }}
to be reduced to${string}
.in JS, it would be:
the reasoning being the
toString(): string
remains unchanged thus the resulting type should be safe to reduce.The text was updated successfully, but these errors were encountered: