diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 56fda405694..c1950260826 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -17646,7 +17646,7 @@ namespace ts { // Even if the call is incomplete, we'll have a missing expression as our last argument, // so we can say the count is just the arg list length argCount = args.length; - typeArguments = undefined; + typeArguments = node.typeArguments; if (node.template.kind === SyntaxKind.TemplateExpression) { // If a tagged template expression lacks a tail literal, the call is incomplete. diff --git a/tests/baselines/reference/genericTemplateOverloadResolution.js b/tests/baselines/reference/genericTemplateOverloadResolution.js new file mode 100644 index 00000000000..88906e515f8 --- /dev/null +++ b/tests/baselines/reference/genericTemplateOverloadResolution.js @@ -0,0 +1,19 @@ +//// [genericTemplateOverloadResolution.ts] +interface IFooFn { + (strings: TemplateStringsArray): Promise<{}>; + (strings: TemplateStringsArray): Promise; +} + +declare const fooFn: IFooFn; + +declare function expect(x: Promise): void; + +expect(fooFn``); + + +//// [genericTemplateOverloadResolution.js] +var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; +}; +expect(fooFn(__makeTemplateObject([""], [""]))); diff --git a/tests/baselines/reference/genericTemplateOverloadResolution.symbols b/tests/baselines/reference/genericTemplateOverloadResolution.symbols new file mode 100644 index 00000000000..700f40956a1 --- /dev/null +++ b/tests/baselines/reference/genericTemplateOverloadResolution.symbols @@ -0,0 +1,30 @@ +=== tests/cases/compiler/genericTemplateOverloadResolution.ts === +interface IFooFn { +>IFooFn : Symbol(IFooFn, Decl(genericTemplateOverloadResolution.ts, 0, 0)) + + (strings: TemplateStringsArray): Promise<{}>; +>strings : Symbol(strings, Decl(genericTemplateOverloadResolution.ts, 1, 5)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.d.ts, --, --)) + + (strings: TemplateStringsArray): Promise; +>T : Symbol(T, Decl(genericTemplateOverloadResolution.ts, 2, 5)) +>strings : Symbol(strings, Decl(genericTemplateOverloadResolution.ts, 2, 8)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.d.ts, --, --)) +>T : Symbol(T, Decl(genericTemplateOverloadResolution.ts, 2, 5)) +} + +declare const fooFn: IFooFn; +>fooFn : Symbol(fooFn, Decl(genericTemplateOverloadResolution.ts, 5, 13)) +>IFooFn : Symbol(IFooFn, Decl(genericTemplateOverloadResolution.ts, 0, 0)) + +declare function expect(x: Promise): void; +>expect : Symbol(expect, Decl(genericTemplateOverloadResolution.ts, 5, 28)) +>x : Symbol(x, Decl(genericTemplateOverloadResolution.ts, 7, 24)) +>Promise : Symbol(Promise, Decl(lib.d.ts, --, --)) + +expect(fooFn``); +>expect : Symbol(expect, Decl(genericTemplateOverloadResolution.ts, 5, 28)) +>fooFn : Symbol(fooFn, Decl(genericTemplateOverloadResolution.ts, 5, 13)) + diff --git a/tests/baselines/reference/genericTemplateOverloadResolution.types b/tests/baselines/reference/genericTemplateOverloadResolution.types new file mode 100644 index 00000000000..f405c0492ce --- /dev/null +++ b/tests/baselines/reference/genericTemplateOverloadResolution.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/genericTemplateOverloadResolution.ts === +interface IFooFn { +>IFooFn : IFooFn + + (strings: TemplateStringsArray): Promise<{}>; +>strings : TemplateStringsArray +>TemplateStringsArray : TemplateStringsArray +>Promise : Promise + + (strings: TemplateStringsArray): Promise; +>T : T +>strings : TemplateStringsArray +>TemplateStringsArray : TemplateStringsArray +>Promise : Promise +>T : T +} + +declare const fooFn: IFooFn; +>fooFn : IFooFn +>IFooFn : IFooFn + +declare function expect(x: Promise): void; +>expect : (x: Promise) => void +>x : Promise +>Promise : Promise + +expect(fooFn``); +>expect(fooFn``) : void +>expect : (x: Promise) => void +>fooFn`` : Promise +>fooFn : IFooFn +>`` : "" + diff --git a/tests/cases/compiler/genericTemplateOverloadResolution.ts b/tests/cases/compiler/genericTemplateOverloadResolution.ts new file mode 100644 index 00000000000..0977fa28071 --- /dev/null +++ b/tests/cases/compiler/genericTemplateOverloadResolution.ts @@ -0,0 +1,10 @@ +interface IFooFn { + (strings: TemplateStringsArray): Promise<{}>; + (strings: TemplateStringsArray): Promise; +} + +declare const fooFn: IFooFn; + +declare function expect(x: Promise): void; + +expect(fooFn``);