//// [taggedTemplateStringsWithOverloadResolution2.ts] function foo1(strs: TemplateStringsArray, x: number): string; function foo1(strs: string[], x: number): number; function foo1(...stuff: any[]): any { return undefined; } var a = foo1 `${1}`; // string var b = foo1([], 1); // number function foo2(strs: string[], x: number): number; function foo2(strs: TemplateStringsArray, x: number): string; function foo2(...stuff: any[]): any { return undefined; } var c = foo2 `${1}`; // number var d = foo2([], 1); // number //// [taggedTemplateStringsWithOverloadResolution2.js] function foo1() { var stuff = []; for (var _i = 0; _i < arguments.length; _i++) { stuff[_i - 0] = arguments[_i]; } return undefined; } var a = (_a = ["", ""], _a.raw = ["", ""], foo1(_a, 1)); // string var b = foo1([], 1); // number function foo2() { var stuff = []; for (var _i = 0; _i < arguments.length; _i++) { stuff[_i - 0] = arguments[_i]; } return undefined; } var c = (_b = ["", ""], _b.raw = ["", ""], foo2(_b, 1)); // number var d = foo2([], 1); // number var _a, _b;