Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Template literal types for contextually typed template literal expressions #43376

Merged
merged 4 commits into from Mar 26, 2021

Conversation

ahejlsberg
Copy link
Member

@ahejlsberg ahejlsberg commented Mar 25, 2021

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 labels Mar 25, 2021
@ahejlsberg ahejlsberg added this to the TypeScript 4.3.1 milestone Mar 25, 2021
@ahejlsberg ahejlsberg merged commit a26acf4 into master Mar 26, 2021
10 checks passed
@ahejlsberg ahejlsberg deleted the fix43143 branch Mar 26, 2021
@orta
Copy link
Contributor

@orta orta commented Mar 26, 2021

@typescript-bot pack this

@typescript-bot
Copy link
Collaborator

@typescript-bot typescript-bot commented Mar 26, 2021

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Author: Team For Milestone Bug
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants