Skip to content

Template literal types for contextually typed template literal expressions - #43376

Merged
ahejlsberg merged 4 commits into
masterfrom
fix43143
Mar 26, 2021
Merged

Template literal types for contextually typed template literal expressions#43376
ahejlsberg merged 4 commits into
masterfrom
fix43143

Conversation

@ahejlsberg

@ahejlsbergahejlsberg commented Mar 25, 2021

Copy link
Copy Markdown
Member

In #41891 we introduced template literal types for all template literal expressions. That turned out to be too much of a breaking change, and it was reverted in #42588. In this PR we instead introduce template literal types for contextually typed template literal expressions. Specifically, a template literal expression is given a template literal type if it is contextually typed by a string literal or template literal type, or if it is contextually typed by a generic type with a constraint that is assignable to type string, alleviating the need to use as const in scenarios where it is obvious a template literal type is desired. This less aggressive approach fixes the originally reported issues and shouldn't cause any backwards compatibility breaks.

Some examples:

functionbar(s: string): `hello ${string}` {return`hello ${s}`;// Now ok, previously was error}declarelets: string;declarefunctiong1<T>(x: T): T;declarefunctiong2<Textendsstring>(x: T): T;letx1=g1(`xyz-${s}`);// stringletx2=g2(`xyz-${s}`);// `xyz-${string}`, previously was string

Fixes#43143.

@orta

orta commented Mar 26, 2021

Copy link
Copy Markdown
Contributor

@typescript-bot pack this

@typescript-bot

typescript-bot commented Mar 26, 2021

Copy link
Copy Markdown
Contributor

Heya @orta, I've started to run the tarball bundle task on this PR at a155082. You can monitor the build here.

@ghostghost mentioned this pull request Jun 6, 2021
@microsoftmicrosoft locked as resolved and limited conversation to collaborators Oct 21, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Author: TeamFor Milestone BugPRs that fix a bug with a specific milestone

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cannot define a matching template literal type to a defined template literal

5 participants

@ahejlsberg@orta@typescript-bot@DanielRosenwasser@RyanCavanaugh