Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

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

#43376
Merged
ahejlsberg merged 4 commits into
mastermicrosoft/TypeScript:masterfrom
fix43143microsoft/TypeScript:fix43143Copy head branch name to clipboard
Mar 26, 2021
Merged

Template literal types for contextually typed template literal expressions#43376
ahejlsberg merged 4 commits into
mastermicrosoft/TypeScript:masterfrom
fix43143microsoft/TypeScript:fix43143Copy head branch name to clipboard

Conversation

@ahejlsberg

@ahejlsberg ahejlsberg 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:

function bar(s: string): `hello ${string}` {
    return `hello ${s}`;  // Now ok, previously was error
}

declare let s: string;
declare function g1<T>(x: T): T;
declare function g2<T extends string>(x: T): T;

let x1 = g1(`xyz-${s}`);  // string
let x2 = g2(`xyz-${s}`);  // `xyz-${string}`, previously was string

Fixes #43143.

@typescript-bot typescript-bot added Author: Team For Milestone Bug PRs that fix a bug with a specific milestone labels Mar 25, 2021
@ahejlsberg ahejlsberg added this to the TypeScript 4.3.1 milestone Mar 25, 2021
@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.

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

Labels

Author: Team For Milestone Bug PRs 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

Morty Proxy This is a proxified and sanitized view of the page, visit original site.