GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Template literal types for contextually typed template literal expressions by ahejlsberg · Pull Request #43376 · microsoft/TypeScript

Conversation

@ahejlsberg

@ahejlsberg Anders Hejlsberg (ahejlsberg) commented Mar 25, 2021 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

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.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

DanielRosenwasser, KisaragiEffective, ExE-Boss, dragomirtitian, sinclairzx81, Mahmoud-Masri, WillAvudim, c69-addepar, and bcakmakoglu reacted with thumbs up emoji uhyo, sinclairzx81, aminpaks, sergeks, WillAvudim, and sstur reacted with hooray emoji earthlyreason, millsp, sinclairzx81, aminpaks, WillAvudim, and c69-addepar reacted with heart emoji
All reactions
  • 👍 9 reactions
  • 🎉 6 reactions
  • ❤️ 6 reactions
Anders Hejlsberg (ahejlsberg) added 3 commits March 25, 2021 09:25
@ahejlsberg
Template literal types for contextually typed template literal expres…
df77f4d
…sions
@ahejlsberg
Accept new baselines
1ba291c
@ahejlsberg
Add regression test
c8ce5c6
@typescript-bot TypeScript Bot (typescript-bot) assigned Anders Hejlsberg (ahejlsberg) Mar 25, 2021
@typescript-bot TypeScript Bot (typescript-bot) added Author: Team For Milestone Bug PRs that fix a bug with a specific milestone labels Mar 25, 2021
@ahejlsberg
Anders Hejlsberg (ahejlsberg) requested review from Daniel Rosenwasser (DanielRosenwasser) and Ryan Cavanaugh (RyanCavanaugh) March 25, 2021 16:55
@ahejlsberg Anders Hejlsberg (ahejlsberg) added this to the TypeScript 4.3.1 milestone Mar 25, 2021
DanielRosenwasser
Daniel Rosenwasser (DanielRosenwasser) approved these changes Mar 25, 2021
View reviewed changes
@ahejlsberg
Add a few more tests
a155082
RyanCavanaugh
Ryan Cavanaugh (RyanCavanaugh) approved these changes Mar 26, 2021
View reviewed changes
@ahejlsberg
Anders Hejlsberg (ahejlsberg) merged commit a26acf4 into master Mar 26, 2021
@ahejlsberg
Anders Hejlsberg (ahejlsberg) deleted the fix43143 branch March 26, 2021 17:32
@ahejlsberg Anders Hejlsberg (ahejlsberg) mentioned this pull request Mar 26, 2021
Try to preserve template-ness of string literal types where possible #41631
Closed
5 tasks done
@orta

Orta Therox (orta) commented Mar 26, 2021

Copy link
Copy Markdown
Contributor

TypeScript Bot (@typescript-bot) pack this

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@typescript-bot

TypeScript Bot (typescript-bot) commented Mar 26, 2021 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

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

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@DanielRosenwasser Daniel Rosenwasser (DanielRosenwasser) mentioned this pull request Apr 7, 2021
Design Meeting Notes, 3/26/2021 #43581
Closed
@ghost ghost mentioned this pull request Jun 6, 2021
Negated types #29317
Closed
@DanielRosenwasser Daniel Rosenwasser (DanielRosenwasser) mentioned this pull request Aug 21, 2023
Evaluate simple template expressions #53907
Merged
@microsoft 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.

Reviewers

@DanielRosenwasser Daniel Rosenwasser (DanielRosenwasser) DanielRosenwasser approved these changes
@RyanCavanaugh Ryan Cavanaugh (RyanCavanaugh) RyanCavanaugh approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@ahejlsberg Anders Hejlsberg (ahejlsberg)

Labels

Author: Team For Milestone Bug PRs that fix a bug with a specific milestone

Projects

None yet

Milestone

TypeScript 4.3.1

Development

Successfully merging this pull request may close these issues.

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

Uh oh!

There was an error while loading. Please reload this page.

5 participants

@ahejlsberg @orta @typescript-bot @DanielRosenwasser @RyanCavanaugh
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.