Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Add a few more tests
  • Loading branch information
ahejlsberg committed Mar 26, 2021
commit a1550821ab817a1e078996a26b52de26ef6078f4
8 changes: 8 additions & 0 deletions tests/baselines/reference/templateLiteralTypes2.errors.txt
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,14 @@ tests/cases/conformance/types/literal/templateLiteralTypes2.ts(70,9): error TS23
!!! error TS2322: Type '`foo${number}`' is not assignable to type '{ length: number; }'.
}

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

function ft20(s: string) {
let x1 = g1(`xyz-${s}`); // string
let x2 = g2(`xyz-${s}`); // `xyz-${string}`
}

// Repro from #41631

declare function takesLiteral<T extends string>(literal: T): T extends `foo.bar.${infer R}` ? R : unknown;
Expand Down
15 changes: 15 additions & 0 deletions tests/baselines/reference/templateLiteralTypes2.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,14 @@ function ft14(t: `foo${number}`) {
let x6: { length: number } = t;
}

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

function ft20(s: string) {
let x1 = g1(`xyz-${s}`); // string
let x2 = g2(`xyz-${s}`); // `xyz-${string}`
}

// Repro from #41631

declare function takesLiteral<T extends string>(literal: T): T extends `foo.bar.${infer R}` ? R : unknown;
Expand Down Expand Up @@ -167,6 +175,10 @@ function ft14(t) {
var x4 = t;
var x6 = t;
}
function ft20(s) {
var x1 = g1("xyz-" + s); // string
var x2 = g2("xyz-" + s); // `xyz-${string}`
}
var t1 = takesLiteral("foo.bar.baz"); // "baz"
var id2 = "foo.bar.baz";
var t2 = takesLiteral(id2); // "baz"
Expand Down Expand Up @@ -195,6 +207,9 @@ declare function nonWidening<T extends string | number | symbol>(x: T): T;
declare function ft13(s: string, cond: boolean): void;
declare type T0 = string | `${number}px`;
declare function ft14(t: `foo${number}`): void;
declare function g1<T>(x: T): T;
declare function g2<T extends string>(x: T): T;
declare function ft20(s: string): void;
declare function takesLiteral<T extends string>(literal: T): T extends `foo.bar.${infer R}` ? R : unknown;
declare const t1: "baz";
declare const id2 = "foo.bar.baz";
Expand Down
101 changes: 65 additions & 36 deletions tests/baselines/reference/templateLiteralTypes2.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -257,78 +257,107 @@ function ft14(t: `foo${number}`) {
>t : Symbol(t, Decl(templateLiteralTypes2.ts, 64, 14))
}

declare function g1<T>(x: T): T;
>g1 : Symbol(g1, Decl(templateLiteralTypes2.ts, 70, 1))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 72, 20))
>x : Symbol(x, Decl(templateLiteralTypes2.ts, 72, 23))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 72, 20))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 72, 20))

declare function g2<T extends string>(x: T): T;
>g2 : Symbol(g2, Decl(templateLiteralTypes2.ts, 72, 32))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 73, 20))
>x : Symbol(x, Decl(templateLiteralTypes2.ts, 73, 38))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 73, 20))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 73, 20))

function ft20(s: string) {
>ft20 : Symbol(ft20, Decl(templateLiteralTypes2.ts, 73, 47))
>s : Symbol(s, Decl(templateLiteralTypes2.ts, 75, 14))

let x1 = g1(`xyz-${s}`); // string
>x1 : Symbol(x1, Decl(templateLiteralTypes2.ts, 76, 7))
>g1 : Symbol(g1, Decl(templateLiteralTypes2.ts, 70, 1))
>s : Symbol(s, Decl(templateLiteralTypes2.ts, 75, 14))

let x2 = g2(`xyz-${s}`); // `xyz-${string}`
>x2 : Symbol(x2, Decl(templateLiteralTypes2.ts, 77, 7))
>g2 : Symbol(g2, Decl(templateLiteralTypes2.ts, 72, 32))
>s : Symbol(s, Decl(templateLiteralTypes2.ts, 75, 14))
}

// Repro from #41631

declare function takesLiteral<T extends string>(literal: T): T extends `foo.bar.${infer R}` ? R : unknown;
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 70, 1))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 74, 30))
>literal : Symbol(literal, Decl(templateLiteralTypes2.ts, 74, 48))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 74, 30))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 74, 30))
>R : Symbol(R, Decl(templateLiteralTypes2.ts, 74, 87))
>R : Symbol(R, Decl(templateLiteralTypes2.ts, 74, 87))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 78, 1))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 82, 30))
>literal : Symbol(literal, Decl(templateLiteralTypes2.ts, 82, 48))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 82, 30))
>T : Symbol(T, Decl(templateLiteralTypes2.ts, 82, 30))
>R : Symbol(R, Decl(templateLiteralTypes2.ts, 82, 87))
>R : Symbol(R, Decl(templateLiteralTypes2.ts, 82, 87))

const t1 = takesLiteral("foo.bar.baz"); // "baz"
>t1 : Symbol(t1, Decl(templateLiteralTypes2.ts, 76, 5))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 70, 1))
>t1 : Symbol(t1, Decl(templateLiteralTypes2.ts, 84, 5))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 78, 1))

const id2 = "foo.bar.baz";
>id2 : Symbol(id2, Decl(templateLiteralTypes2.ts, 77, 5))
>id2 : Symbol(id2, Decl(templateLiteralTypes2.ts, 85, 5))

const t2 = takesLiteral(id2); // "baz"
>t2 : Symbol(t2, Decl(templateLiteralTypes2.ts, 78, 5))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 70, 1))
>id2 : Symbol(id2, Decl(templateLiteralTypes2.ts, 77, 5))
>t2 : Symbol(t2, Decl(templateLiteralTypes2.ts, 86, 5))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 78, 1))
>id2 : Symbol(id2, Decl(templateLiteralTypes2.ts, 85, 5))

declare const someString: string;
>someString : Symbol(someString, Decl(templateLiteralTypes2.ts, 80, 13))
>someString : Symbol(someString, Decl(templateLiteralTypes2.ts, 88, 13))

const t3 = takesLiteral(`foo.bar.${someString}`); // string
>t3 : Symbol(t3, Decl(templateLiteralTypes2.ts, 81, 5))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 70, 1))
>someString : Symbol(someString, Decl(templateLiteralTypes2.ts, 80, 13))
>t3 : Symbol(t3, Decl(templateLiteralTypes2.ts, 89, 5))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 78, 1))
>someString : Symbol(someString, Decl(templateLiteralTypes2.ts, 88, 13))

const id4 = `foo.bar.${someString}`;
>id4 : Symbol(id4, Decl(templateLiteralTypes2.ts, 83, 5))
>someString : Symbol(someString, Decl(templateLiteralTypes2.ts, 80, 13))
>id4 : Symbol(id4, Decl(templateLiteralTypes2.ts, 91, 5))
>someString : Symbol(someString, Decl(templateLiteralTypes2.ts, 88, 13))

const t4 = takesLiteral(id4); // string
>t4 : Symbol(t4, Decl(templateLiteralTypes2.ts, 84, 5))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 70, 1))
>id4 : Symbol(id4, Decl(templateLiteralTypes2.ts, 83, 5))
>t4 : Symbol(t4, Decl(templateLiteralTypes2.ts, 92, 5))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 78, 1))
>id4 : Symbol(id4, Decl(templateLiteralTypes2.ts, 91, 5))

declare const someUnion: 'abc' | 'def' | 'ghi';
>someUnion : Symbol(someUnion, Decl(templateLiteralTypes2.ts, 86, 13))
>someUnion : Symbol(someUnion, Decl(templateLiteralTypes2.ts, 94, 13))

const t5 = takesLiteral(`foo.bar.${someUnion}`); // "abc" | "def" | "ghi"
>t5 : Symbol(t5, Decl(templateLiteralTypes2.ts, 87, 5))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 70, 1))
>someUnion : Symbol(someUnion, Decl(templateLiteralTypes2.ts, 86, 13))
>t5 : Symbol(t5, Decl(templateLiteralTypes2.ts, 95, 5))
>takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 78, 1))
>someUnion : Symbol(someUnion, Decl(templateLiteralTypes2.ts, 94, 13))

// Repro from #41732

const pixelValue: number = 22;
>pixelValue : Symbol(pixelValue, Decl(templateLiteralTypes2.ts, 91, 5))
>pixelValue : Symbol(pixelValue, Decl(templateLiteralTypes2.ts, 99, 5))

type PixelValueType = `${number}px`;
>PixelValueType : Symbol(PixelValueType, Decl(templateLiteralTypes2.ts, 91, 30))
>PixelValueType : Symbol(PixelValueType, Decl(templateLiteralTypes2.ts, 99, 30))

const pixelString: PixelValueType = `22px`;
>pixelString : Symbol(pixelString, Decl(templateLiteralTypes2.ts, 95, 5))
>PixelValueType : Symbol(PixelValueType, Decl(templateLiteralTypes2.ts, 91, 30))
>pixelString : Symbol(pixelString, Decl(templateLiteralTypes2.ts, 103, 5))
>PixelValueType : Symbol(PixelValueType, Decl(templateLiteralTypes2.ts, 99, 30))

const pixelStringWithTemplate: PixelValueType = `${pixelValue}px`;
>pixelStringWithTemplate : Symbol(pixelStringWithTemplate, Decl(templateLiteralTypes2.ts, 97, 5))
>PixelValueType : Symbol(PixelValueType, Decl(templateLiteralTypes2.ts, 91, 30))
>pixelValue : Symbol(pixelValue, Decl(templateLiteralTypes2.ts, 91, 5))
>pixelStringWithTemplate : Symbol(pixelStringWithTemplate, Decl(templateLiteralTypes2.ts, 105, 5))
>PixelValueType : Symbol(PixelValueType, Decl(templateLiteralTypes2.ts, 99, 30))
>pixelValue : Symbol(pixelValue, Decl(templateLiteralTypes2.ts, 99, 5))

// Repro from #43143

function getCardTitle(title: string): `test-${string}` {
>getCardTitle : Symbol(getCardTitle, Decl(templateLiteralTypes2.ts, 97, 66))
>title : Symbol(title, Decl(templateLiteralTypes2.ts, 101, 22))
>getCardTitle : Symbol(getCardTitle, Decl(templateLiteralTypes2.ts, 105, 66))
>title : Symbol(title, Decl(templateLiteralTypes2.ts, 109, 22))

return `test-${title}`;
>title : Symbol(title, Decl(templateLiteralTypes2.ts, 101, 22))
>title : Symbol(title, Decl(templateLiteralTypes2.ts, 109, 22))
}

27 changes: 27 additions & 0 deletions tests/baselines/reference/templateLiteralTypes2.types
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,33 @@ function ft14(t: `foo${number}`) {
>t : `foo${number}`
}

declare function g1<T>(x: T): T;
>g1 : <T>(x: T) => T
>x : T

declare function g2<T extends string>(x: T): T;
>g2 : <T extends string>(x: T) => T
>x : T

function ft20(s: string) {
>ft20 : (s: string) => void
>s : string

let x1 = g1(`xyz-${s}`); // string
>x1 : string
>g1(`xyz-${s}`) : string
>g1 : <T>(x: T) => T
>`xyz-${s}` : string
>s : string

let x2 = g2(`xyz-${s}`); // `xyz-${string}`
>x2 : `xyz-${string}`
>g2(`xyz-${s}`) : `xyz-${string}`
>g2 : <T extends string>(x: T) => T
>`xyz-${s}` : `xyz-${string}`
>s : string
}

// Repro from #41631

declare function takesLiteral<T extends string>(literal: T): T extends `foo.bar.${infer R}` ? R : unknown;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,14 @@ function ft14(t: `foo${number}`) {
let x6: { length: number } = t;
}

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

function ft20(s: string) {
let x1 = g1(`xyz-${s}`); // string
let x2 = g2(`xyz-${s}`); // `xyz-${string}`
}

// Repro from #41631

declare function takesLiteral<T extends string>(literal: T): T extends `foo.bar.${infer R}` ? R : unknown;
Expand Down