diff --git a/tests/baselines/reference/accessorsOverrideProperty2.errors.txt b/tests/baselines/reference/accessorsOverrideProperty2.errors.txt index 6eedcdc47e924..ce4cbb8cdd84e 100644 --- a/tests/baselines/reference/accessorsOverrideProperty2.errors.txt +++ b/tests/baselines/reference/accessorsOverrideProperty2.errors.txt @@ -14,5 +14,5 @@ tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProp } const obj = new Derived(); // nothing printed - console.log(obj.x); // 1 + console.log(obj.x); // number \ No newline at end of file diff --git a/tests/baselines/reference/accessorsOverrideProperty2.js b/tests/baselines/reference/accessorsOverrideProperty2.js index e16ae60363e36..2a3f5723543bf 100644 --- a/tests/baselines/reference/accessorsOverrideProperty2.js +++ b/tests/baselines/reference/accessorsOverrideProperty2.js @@ -9,7 +9,7 @@ class Derived extends Base { } const obj = new Derived(); // nothing printed -console.log(obj.x); // 1 +console.log(obj.x); // number //// [accessorsOverrideProperty2.js] @@ -21,4 +21,4 @@ class Derived extends Base { set x(value) { console.log(`x was set to ${value}`); } } const obj = new Derived(); // nothing printed -console.log(obj.x); // 1 +console.log(obj.x); // number diff --git a/tests/baselines/reference/accessorsOverrideProperty2.symbols b/tests/baselines/reference/accessorsOverrideProperty2.symbols index eab967402566b..e4fa4bc7fc543 100644 --- a/tests/baselines/reference/accessorsOverrideProperty2.symbols +++ b/tests/baselines/reference/accessorsOverrideProperty2.symbols @@ -26,7 +26,7 @@ const obj = new Derived(); // nothing printed >obj : Symbol(obj, Decl(accessorsOverrideProperty2.ts, 9, 5)) >Derived : Symbol(Derived, Decl(accessorsOverrideProperty2.ts, 2, 1)) -console.log(obj.x); // 1 +console.log(obj.x); // number >console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) >console : Symbol(console, Decl(lib.dom.d.ts, --, --)) >log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) diff --git a/tests/baselines/reference/accessorsOverrideProperty2.types b/tests/baselines/reference/accessorsOverrideProperty2.types index 860b6f4f021cf..2fcff56230f5c 100644 --- a/tests/baselines/reference/accessorsOverrideProperty2.types +++ b/tests/baselines/reference/accessorsOverrideProperty2.types @@ -31,7 +31,7 @@ const obj = new Derived(); // nothing printed >new Derived() : Derived >Derived : typeof Derived -console.log(obj.x); // 1 +console.log(obj.x); // number >console.log(obj.x) : void >console.log : (...data: any[]) => void >console : Console diff --git a/tests/baselines/reference/templateLiteralTypes2.errors.txt b/tests/baselines/reference/templateLiteralTypes2.errors.txt index 7e9308d47e659..c649962cc596a 100644 --- a/tests/baselines/reference/templateLiteralTypes2.errors.txt +++ b/tests/baselines/reference/templateLiteralTypes2.errors.txt @@ -5,10 +5,10 @@ tests/cases/conformance/types/literal/templateLiteralTypes2.ts(32,11): error TS2 ==== tests/cases/conformance/types/literal/templateLiteralTypes2.ts (3 errors) ==== function ft1(s: string, n: number, u: 'foo' | 'bar' | 'baz', t: T) { - const c1 = `abc${s}`; // `abc${string}` - const c2 = `abc${n}`; // `abc${number}` - const c3 = `abc${u}`; // "abcfoo" | "abcbar" | "abcbaz" - const c4 = `abc${t}`; // `abc${T} + const c1 = `abc${s}`; + const c2 = `abc${n}`; + const c3 = `abc${u}`; + const c4 = `abc${t}`; const d1: `abc${string}` = `abc${s}`; const d2: `abc${number}` = `abc${n}`; const d3: `abc${'foo' | 'bar' | 'baz'}` = `abc${u}`; @@ -20,9 +20,9 @@ tests/cases/conformance/types/literal/templateLiteralTypes2.ts(32,11): error TS2 } function ft10(s: string) { - const c1 = `abc${s}`; // Widening type `abc${string}` + const c1 = `abc${s}`; // Type string let v1 = c1; // Type string - const c2 = c1; // Widening type `abc${string}` + const c2 = c1; // Type string let v2 = c2; // Type string const c3: `abc${string}` = `abc${s}`; let v3 = c3; // Type `abc${string}` @@ -33,18 +33,18 @@ tests/cases/conformance/types/literal/templateLiteralTypes2.ts(32,11): error TS2 } function ft11(s: string, cond: boolean) { - const c1 = cond ? `foo${s}` : `bar${s}`; // widening `foo${string}` | widening `bar${string}` + const c1 = cond ? `foo${s}` : `bar${s}`; // string const c2: `foo${string}` | `bar${string}` = c1; // `foo${string}` | `bar${string}` ~~ !!! error TS2322: Type 'string' is not assignable to type '`foo${string}` | `bar${string}`'. - const c3 = cond ? c1 : c2; // `foo${string}` | `bar${string}` - const c4 = cond ? c3 : `baz${s}`; // `foo${string}` | `bar${string}` | widening `baz${string}` + const c3 = cond ? c1 : c2; // string + const c4 = cond ? c3 : `baz${s}`; // string const c5: `foo${string}` | `bar${string}` | `baz${string}` = c4; // `foo${string}` | `bar${string}` | `baz${string}` ~~ !!! error TS2322: Type 'string' is not assignable to type '`foo${string}` | `bar${string}` | `baz${string}`'. let v1 = c1; // string let v2 = c2; // `foo${string}` | `bar${string}` - let v3 = c3; // `foo${string}` | `bar${string}` + let v3 = c3; // string let v4 = c4; // string let v5 = c5; // `foo${string}` | `bar${string}` | `baz${string}` } @@ -102,7 +102,7 @@ tests/cases/conformance/types/literal/templateLiteralTypes2.ts(32,11): error TS2 const t3 = takesLiteral(`foo.bar.${someString}`); // string const id4 = `foo.bar.${someString}`; - const t4 = takesLiteral(id4); // string + const t4 = takesLiteral(id4); // unknown declare const someUnion: 'abc' | 'def' | 'ghi'; const t5 = takesLiteral(`foo.bar.${someUnion}`); // "abc" | "def" | "ghi" diff --git a/tests/baselines/reference/templateLiteralTypes2.js b/tests/baselines/reference/templateLiteralTypes2.js index 1b31f3a00ee29..9f432cd21ef3d 100644 --- a/tests/baselines/reference/templateLiteralTypes2.js +++ b/tests/baselines/reference/templateLiteralTypes2.js @@ -1,9 +1,9 @@ //// [templateLiteralTypes2.ts] function ft1(s: string, n: number, u: 'foo' | 'bar' | 'baz', t: T) { - const c1 = `abc${s}`; // `abc${string}` - const c2 = `abc${n}`; // `abc${number}` - const c3 = `abc${u}`; // "abcfoo" | "abcbar" | "abcbaz" - const c4 = `abc${t}`; // `abc${T} + const c1 = `abc${s}`; + const c2 = `abc${n}`; + const c3 = `abc${u}`; + const c4 = `abc${t}`; const d1: `abc${string}` = `abc${s}`; const d2: `abc${number}` = `abc${n}`; const d3: `abc${'foo' | 'bar' | 'baz'}` = `abc${u}`; @@ -15,9 +15,9 @@ function ft2(s: string) { } function ft10(s: string) { - const c1 = `abc${s}`; // Widening type `abc${string}` + const c1 = `abc${s}`; // Type string let v1 = c1; // Type string - const c2 = c1; // Widening type `abc${string}` + const c2 = c1; // Type string let v2 = c2; // Type string const c3: `abc${string}` = `abc${s}`; let v3 = c3; // Type `abc${string}` @@ -26,14 +26,14 @@ function ft10(s: string) { } function ft11(s: string, cond: boolean) { - const c1 = cond ? `foo${s}` : `bar${s}`; // widening `foo${string}` | widening `bar${string}` + const c1 = cond ? `foo${s}` : `bar${s}`; // string const c2: `foo${string}` | `bar${string}` = c1; // `foo${string}` | `bar${string}` - const c3 = cond ? c1 : c2; // `foo${string}` | `bar${string}` - const c4 = cond ? c3 : `baz${s}`; // `foo${string}` | `bar${string}` | widening `baz${string}` + const c3 = cond ? c1 : c2; // string + const c4 = cond ? c3 : `baz${s}`; // string const c5: `foo${string}` | `bar${string}` | `baz${string}` = c4; // `foo${string}` | `bar${string}` | `baz${string}` let v1 = c1; // string let v2 = c2; // `foo${string}` | `bar${string}` - let v3 = c3; // `foo${string}` | `bar${string}` + let v3 = c3; // string let v4 = c4; // string let v5 = c5; // `foo${string}` | `bar${string}` | `baz${string}` } @@ -91,7 +91,7 @@ declare const someString: string; const t3 = takesLiteral(`foo.bar.${someString}`); // string const id4 = `foo.bar.${someString}`; -const t4 = takesLiteral(id4); // string +const t4 = takesLiteral(id4); // unknown declare const someUnion: 'abc' | 'def' | 'ghi'; const t5 = takesLiteral(`foo.bar.${someUnion}`); // "abc" | "def" | "ghi" @@ -122,10 +122,10 @@ C2(`rotate(${interpolatedStyle.rotate}dig)`); //// [templateLiteralTypes2.js] "use strict"; function ft1(s, n, u, t) { - var c1 = "abc".concat(s); // `abc${string}` - var c2 = "abc".concat(n); // `abc${number}` - var c3 = "abc".concat(u); // "abcfoo" | "abcbar" | "abcbaz" - var c4 = "abc".concat(t); // `abc${T} + var c1 = "abc".concat(s); + var c2 = "abc".concat(n); + var c3 = "abc".concat(u); + var c4 = "abc".concat(t); var d1 = "abc".concat(s); var d2 = "abc".concat(n); var d3 = "abc".concat(u); @@ -135,9 +135,9 @@ function ft2(s) { return "abc".concat(s); } function ft10(s) { - var c1 = "abc".concat(s); // Widening type `abc${string}` + var c1 = "abc".concat(s); // Type string var v1 = c1; // Type string - var c2 = c1; // Widening type `abc${string}` + var c2 = c1; // Type string var v2 = c2; // Type string var c3 = "abc".concat(s); var v3 = c3; // Type `abc${string}` @@ -145,14 +145,14 @@ function ft10(s) { var v4 = c4; // Type `abc${string}` } function ft11(s, cond) { - var c1 = cond ? "foo".concat(s) : "bar".concat(s); // widening `foo${string}` | widening `bar${string}` + var c1 = cond ? "foo".concat(s) : "bar".concat(s); // string var c2 = c1; // `foo${string}` | `bar${string}` - var c3 = cond ? c1 : c2; // `foo${string}` | `bar${string}` - var c4 = cond ? c3 : "baz".concat(s); // `foo${string}` | `bar${string}` | widening `baz${string}` + var c3 = cond ? c1 : c2; // string + var c4 = cond ? c3 : "baz".concat(s); // string var c5 = c4; // `foo${string}` | `bar${string}` | `baz${string}` var v1 = c1; // string var v2 = c2; // `foo${string}` | `bar${string}` - var v3 = c3; // `foo${string}` | `bar${string}` + var v3 = c3; // string var v4 = c4; // string var v5 = c5; // `foo${string}` | `bar${string}` | `baz${string}` } @@ -190,7 +190,7 @@ var id2 = "foo.bar.baz"; var t2 = takesLiteral(id2); // "baz" var t3 = takesLiteral("foo.bar.".concat(someString)); // string var id4 = "foo.bar.".concat(someString); -var t4 = takesLiteral(id4); // string +var t4 = takesLiteral(id4); // unknown var t5 = takesLiteral("foo.bar.".concat(someUnion)); // "abc" | "def" | "ghi" // Repro from #41732 var pixelValue = 22; diff --git a/tests/baselines/reference/templateLiteralTypes2.symbols b/tests/baselines/reference/templateLiteralTypes2.symbols index 079a8520c9984..8454302ed052d 100644 --- a/tests/baselines/reference/templateLiteralTypes2.symbols +++ b/tests/baselines/reference/templateLiteralTypes2.symbols @@ -8,19 +8,19 @@ function ft1(s: string, n: number, u: 'foo' | 'bar' | 'baz', t >t : Symbol(t, Decl(templateLiteralTypes2.ts, 0, 78)) >T : Symbol(T, Decl(templateLiteralTypes2.ts, 0, 13)) - const c1 = `abc${s}`; // `abc${string}` + const c1 = `abc${s}`; >c1 : Symbol(c1, Decl(templateLiteralTypes2.ts, 1, 9)) >s : Symbol(s, Decl(templateLiteralTypes2.ts, 0, 31)) - const c2 = `abc${n}`; // `abc${number}` + const c2 = `abc${n}`; >c2 : Symbol(c2, Decl(templateLiteralTypes2.ts, 2, 9)) >n : Symbol(n, Decl(templateLiteralTypes2.ts, 0, 41)) - const c3 = `abc${u}`; // "abcfoo" | "abcbar" | "abcbaz" + const c3 = `abc${u}`; >c3 : Symbol(c3, Decl(templateLiteralTypes2.ts, 3, 9)) >u : Symbol(u, Decl(templateLiteralTypes2.ts, 0, 52)) - const c4 = `abc${t}`; // `abc${T} + const c4 = `abc${t}`; >c4 : Symbol(c4, Decl(templateLiteralTypes2.ts, 4, 9)) >t : Symbol(t, Decl(templateLiteralTypes2.ts, 0, 78)) @@ -54,7 +54,7 @@ function ft10(s: string) { >ft10 : Symbol(ft10, Decl(templateLiteralTypes2.ts, 13, 1)) >s : Symbol(s, Decl(templateLiteralTypes2.ts, 15, 14)) - const c1 = `abc${s}`; // Widening type `abc${string}` + const c1 = `abc${s}`; // Type string >c1 : Symbol(c1, Decl(templateLiteralTypes2.ts, 16, 9)) >s : Symbol(s, Decl(templateLiteralTypes2.ts, 15, 14)) @@ -62,7 +62,7 @@ function ft10(s: string) { >v1 : Symbol(v1, Decl(templateLiteralTypes2.ts, 17, 7)) >c1 : Symbol(c1, Decl(templateLiteralTypes2.ts, 16, 9)) - const c2 = c1; // Widening type `abc${string}` + const c2 = c1; // Type string >c2 : Symbol(c2, Decl(templateLiteralTypes2.ts, 18, 9)) >c1 : Symbol(c1, Decl(templateLiteralTypes2.ts, 16, 9)) @@ -92,7 +92,7 @@ function ft11(s: string, cond: boolean) { >s : Symbol(s, Decl(templateLiteralTypes2.ts, 26, 14)) >cond : Symbol(cond, Decl(templateLiteralTypes2.ts, 26, 24)) - const c1 = cond ? `foo${s}` : `bar${s}`; // widening `foo${string}` | widening `bar${string}` + const c1 = cond ? `foo${s}` : `bar${s}`; // string >c1 : Symbol(c1, Decl(templateLiteralTypes2.ts, 27, 9)) >cond : Symbol(cond, Decl(templateLiteralTypes2.ts, 26, 24)) >s : Symbol(s, Decl(templateLiteralTypes2.ts, 26, 14)) @@ -102,13 +102,13 @@ function ft11(s: string, cond: boolean) { >c2 : Symbol(c2, Decl(templateLiteralTypes2.ts, 28, 9)) >c1 : Symbol(c1, Decl(templateLiteralTypes2.ts, 27, 9)) - const c3 = cond ? c1 : c2; // `foo${string}` | `bar${string}` + const c3 = cond ? c1 : c2; // string >c3 : Symbol(c3, Decl(templateLiteralTypes2.ts, 29, 9)) >cond : Symbol(cond, Decl(templateLiteralTypes2.ts, 26, 24)) >c1 : Symbol(c1, Decl(templateLiteralTypes2.ts, 27, 9)) >c2 : Symbol(c2, Decl(templateLiteralTypes2.ts, 28, 9)) - const c4 = cond ? c3 : `baz${s}`; // `foo${string}` | `bar${string}` | widening `baz${string}` + const c4 = cond ? c3 : `baz${s}`; // string >c4 : Symbol(c4, Decl(templateLiteralTypes2.ts, 30, 9)) >cond : Symbol(cond, Decl(templateLiteralTypes2.ts, 26, 24)) >c3 : Symbol(c3, Decl(templateLiteralTypes2.ts, 29, 9)) @@ -126,7 +126,7 @@ function ft11(s: string, cond: boolean) { >v2 : Symbol(v2, Decl(templateLiteralTypes2.ts, 33, 7)) >c2 : Symbol(c2, Decl(templateLiteralTypes2.ts, 28, 9)) - let v3 = c3; // `foo${string}` | `bar${string}` + let v3 = c3; // string >v3 : Symbol(v3, Decl(templateLiteralTypes2.ts, 34, 7)) >c3 : Symbol(c3, Decl(templateLiteralTypes2.ts, 29, 9)) @@ -322,7 +322,7 @@ const id4 = `foo.bar.${someString}`; >id4 : Symbol(id4, Decl(templateLiteralTypes2.ts, 91, 5)) >someString : Symbol(someString, Decl(templateLiteralTypes2.ts, 88, 13)) -const t4 = takesLiteral(id4); // string +const t4 = takesLiteral(id4); // unknown >t4 : Symbol(t4, Decl(templateLiteralTypes2.ts, 92, 5)) >takesLiteral : Symbol(takesLiteral, Decl(templateLiteralTypes2.ts, 78, 1)) >id4 : Symbol(id4, Decl(templateLiteralTypes2.ts, 91, 5)) diff --git a/tests/baselines/reference/templateLiteralTypes2.types b/tests/baselines/reference/templateLiteralTypes2.types index e771c63c5357c..129a525534315 100644 --- a/tests/baselines/reference/templateLiteralTypes2.types +++ b/tests/baselines/reference/templateLiteralTypes2.types @@ -6,22 +6,22 @@ function ft1(s: string, n: number, u: 'foo' | 'bar' | 'baz', t >u : "foo" | "bar" | "baz" >t : T - const c1 = `abc${s}`; // `abc${string}` + const c1 = `abc${s}`; >c1 : string >`abc${s}` : string >s : string - const c2 = `abc${n}`; // `abc${number}` + const c2 = `abc${n}`; >c2 : string >`abc${n}` : string >n : number - const c3 = `abc${u}`; // "abcfoo" | "abcbar" | "abcbaz" + const c3 = `abc${u}`; >c3 : string >`abc${u}` : string >u : "foo" | "bar" | "baz" - const c4 = `abc${t}`; // `abc${T} + const c4 = `abc${t}`; >c4 : string >`abc${t}` : string >t : T @@ -60,7 +60,7 @@ function ft10(s: string) { >ft10 : (s: string) => void >s : string - const c1 = `abc${s}`; // Widening type `abc${string}` + const c1 = `abc${s}`; // Type string >c1 : string >`abc${s}` : string >s : string @@ -69,7 +69,7 @@ function ft10(s: string) { >v1 : string >c1 : string - const c2 = c1; // Widening type `abc${string}` + const c2 = c1; // Type string >c2 : string >c1 : string @@ -100,7 +100,7 @@ function ft11(s: string, cond: boolean) { >s : string >cond : boolean - const c1 = cond ? `foo${s}` : `bar${s}`; // widening `foo${string}` | widening `bar${string}` + const c1 = cond ? `foo${s}` : `bar${s}`; // string >c1 : string >cond ? `foo${s}` : `bar${s}` : string >cond : boolean @@ -113,14 +113,14 @@ function ft11(s: string, cond: boolean) { >c2 : `foo${string}` | `bar${string}` >c1 : string - const c3 = cond ? c1 : c2; // `foo${string}` | `bar${string}` + const c3 = cond ? c1 : c2; // string >c3 : string >cond ? c1 : c2 : string >cond : boolean >c1 : string >c2 : `foo${string}` | `bar${string}` - const c4 = cond ? c3 : `baz${s}`; // `foo${string}` | `bar${string}` | widening `baz${string}` + const c4 = cond ? c3 : `baz${s}`; // string >c4 : string >cond ? c3 : `baz${s}` : string >cond : boolean @@ -140,7 +140,7 @@ function ft11(s: string, cond: boolean) { >v2 : `foo${string}` | `bar${string}` >c2 : `foo${string}` | `bar${string}` - let v3 = c3; // `foo${string}` | `bar${string}` + let v3 = c3; // string >v3 : string >c3 : string @@ -347,7 +347,7 @@ const id4 = `foo.bar.${someString}`; >`foo.bar.${someString}` : string >someString : string -const t4 = takesLiteral(id4); // string +const t4 = takesLiteral(id4); // unknown >t4 : unknown >takesLiteral(id4) : unknown >takesLiteral : (literal: T) => T extends `foo.bar.${infer R}` ? R : unknown diff --git a/tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty2.ts b/tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty2.ts index a90b76ad23b99..746c571a00112 100644 --- a/tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty2.ts +++ b/tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty2.ts @@ -10,4 +10,4 @@ class Derived extends Base { } const obj = new Derived(); // nothing printed -console.log(obj.x); // 1 +console.log(obj.x); // number diff --git a/tests/cases/conformance/types/literal/templateLiteralTypes2.ts b/tests/cases/conformance/types/literal/templateLiteralTypes2.ts index 5e51c5b30b227..e353afa1d5deb 100644 --- a/tests/cases/conformance/types/literal/templateLiteralTypes2.ts +++ b/tests/cases/conformance/types/literal/templateLiteralTypes2.ts @@ -2,10 +2,10 @@ // @declaration: true function ft1(s: string, n: number, u: 'foo' | 'bar' | 'baz', t: T) { - const c1 = `abc${s}`; // `abc${string}` - const c2 = `abc${n}`; // `abc${number}` - const c3 = `abc${u}`; // "abcfoo" | "abcbar" | "abcbaz" - const c4 = `abc${t}`; // `abc${T} + const c1 = `abc${s}`; + const c2 = `abc${n}`; + const c3 = `abc${u}`; + const c4 = `abc${t}`; const d1: `abc${string}` = `abc${s}`; const d2: `abc${number}` = `abc${n}`; const d3: `abc${'foo' | 'bar' | 'baz'}` = `abc${u}`; @@ -17,9 +17,9 @@ function ft2(s: string) { } function ft10(s: string) { - const c1 = `abc${s}`; // Widening type `abc${string}` + const c1 = `abc${s}`; // Type string let v1 = c1; // Type string - const c2 = c1; // Widening type `abc${string}` + const c2 = c1; // Type string let v2 = c2; // Type string const c3: `abc${string}` = `abc${s}`; let v3 = c3; // Type `abc${string}` @@ -28,14 +28,14 @@ function ft10(s: string) { } function ft11(s: string, cond: boolean) { - const c1 = cond ? `foo${s}` : `bar${s}`; // widening `foo${string}` | widening `bar${string}` + const c1 = cond ? `foo${s}` : `bar${s}`; // string const c2: `foo${string}` | `bar${string}` = c1; // `foo${string}` | `bar${string}` - const c3 = cond ? c1 : c2; // `foo${string}` | `bar${string}` - const c4 = cond ? c3 : `baz${s}`; // `foo${string}` | `bar${string}` | widening `baz${string}` + const c3 = cond ? c1 : c2; // string + const c4 = cond ? c3 : `baz${s}`; // string const c5: `foo${string}` | `bar${string}` | `baz${string}` = c4; // `foo${string}` | `bar${string}` | `baz${string}` let v1 = c1; // string let v2 = c2; // `foo${string}` | `bar${string}` - let v3 = c3; // `foo${string}` | `bar${string}` + let v3 = c3; // string let v4 = c4; // string let v5 = c5; // `foo${string}` | `bar${string}` | `baz${string}` } @@ -93,7 +93,7 @@ declare const someString: string; const t3 = takesLiteral(`foo.bar.${someString}`); // string const id4 = `foo.bar.${someString}`; -const t4 = takesLiteral(id4); // string +const t4 = takesLiteral(id4); // unknown declare const someUnion: 'abc' | 'def' | 'ghi'; const t5 = takesLiteral(`foo.bar.${someUnion}`); // "abc" | "def" | "ghi"