diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index de7c514576408..d1fce970ac86f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -920,7 +920,7 @@ namespace ts { let deferredGlobalAsyncIteratorType: GenericType; let deferredGlobalAsyncIterableIteratorType: GenericType; let deferredGlobalAsyncGeneratorType: GenericType; - let deferredGlobalTemplateStringsArrayType: ObjectType; + let deferredGlobalTemplateStringsArraySymbol: Symbol; let deferredGlobalImportMetaType: ObjectType; let deferredGlobalImportMetaExpressionType: ObjectType; let deferredGlobalExtractSymbol: Symbol; @@ -13336,8 +13336,8 @@ namespace ts { return deferredGlobalTypedPropertyDescriptorType || (deferredGlobalTypedPropertyDescriptorType = getGlobalType("TypedPropertyDescriptor" as __String, /*arity*/ 1, /*reportErrors*/ true)) || emptyGenericType; } - function getGlobalTemplateStringsArrayType() { - return deferredGlobalTemplateStringsArrayType || (deferredGlobalTemplateStringsArrayType = getGlobalType("TemplateStringsArray" as __String, /*arity*/ 0, /*reportErrors*/ true)) || emptyObjectType; + function getGlobalTemplateStringsArraySymbol() { + return deferredGlobalTemplateStringsArraySymbol || (deferredGlobalTemplateStringsArraySymbol = getGlobalSymbol("TemplateStringsArray" as __String, SymbolFlags.TypeAlias, Diagnostics.Cannot_find_global_type_0)!); // TODO: GH#18217 } function getGlobalImportMetaType() { @@ -28833,12 +28833,38 @@ namespace ts { function getEffectiveCallArguments(node: CallLikeExpression): readonly Expression[] { if (node.kind === SyntaxKind.TaggedTemplateExpression) { const template = node.template; - const args: Expression[] = [createSyntheticExpression(template, getGlobalTemplateStringsArrayType())]; + const args: Expression[] = []; + + let templateStringsArrayTypeParameter: Type; + let templateStringsArrayRawTypeParameter: Type; + if (template.kind === SyntaxKind.TemplateExpression) { + const templateStringParts: Type[] = [getStringLiteralType(template.head.text)]; + const templateStringPartsRaw: Type[] = [getStringLiteralType(template.head.rawText ?? template.head.text)]; + const flags: ElementFlags[] = [ElementFlags.Required]; forEach(template.templateSpans, span => { args.push(span.expression); + templateStringParts.push(getStringLiteralType(span.literal.text)); + templateStringPartsRaw.push(getStringLiteralType(span.literal.rawText ?? span.literal.text)); + flags.push(ElementFlags.Required); }); + templateStringsArrayTypeParameter = createTupleType( + templateStringParts, flags); + templateStringsArrayRawTypeParameter = createTupleType( + templateStringPartsRaw, flags); + } + else /* if (template.kind === SyntaxKind.NoSubstitutionTemplateLiteral) */ { + templateStringsArrayTypeParameter = createTupleType( + [getStringLiteralType(template.text)], [ElementFlags.Required]); + templateStringsArrayRawTypeParameter = createTupleType( + [getStringLiteralType(template.rawText ?? template.text)], [ElementFlags.Required]); } + + const templateStringsArray = getGlobalTemplateStringsArraySymbol(); + const expr = createSyntheticExpression(template, + getTypeAliasInstantiation(templateStringsArray, [templateStringsArrayTypeParameter, templateStringsArrayRawTypeParameter])); + args.unshift(expr); + return args; } if (node.kind === SyntaxKind.Decorator) { diff --git a/src/harness/fourslashInterfaceImpl.ts b/src/harness/fourslashInterfaceImpl.ts index ef3471866e223..97c6a0f3134b7 100644 --- a/src/harness/fourslashInterfaceImpl.ts +++ b/src/harness/fourslashInterfaceImpl.ts @@ -1043,7 +1043,7 @@ namespace FourSlashInterface { interfaceEntry("BooleanConstructor"), varEntry("Number"), interfaceEntry("NumberConstructor"), - interfaceEntry("TemplateStringsArray"), + typeEntry("TemplateStringsArray"), interfaceEntry("ImportMeta"), varEntry("Math"), varEntry("Date"), diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index 461d98977730d..2e7c5e566e244 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -581,9 +581,10 @@ interface NumberConstructor { /** An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers. */ declare var Number: NumberConstructor; -interface TemplateStringsArray extends ReadonlyArray { - readonly raw: readonly string[]; -} +type TemplateStringsArray< + TParts extends readonly string[] = readonly string[], + TRawParts extends readonly string[] = readonly string[], +> = TParts & {readonly raw: TRawParts}; /** * The type of `import.meta`. diff --git a/tests/baselines/reference/declarationEmitObjectAssignedDefaultExport.types b/tests/baselines/reference/declarationEmitObjectAssignedDefaultExport.types index b95d5a76463fb..b33f283a7e96a 100644 --- a/tests/baselines/reference/declarationEmitObjectAssignedDefaultExport.types +++ b/tests/baselines/reference/declarationEmitObjectAssignedDefaultExport.types @@ -39,7 +39,7 @@ export interface StyledComponentBase StyledComponent<"div">; >div : (a: TemplateStringsArray) => StyledComponent<"div"> ->a : TemplateStringsArray +>a : TemplateStringsArray } declare const styled: StyledInterface; @@ -55,25 +55,25 @@ import styled from "styled-components"; const A = styled.div``; >A : import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> >styled.div`` : import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> ->styled.div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> +>styled.div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> >styled : import("tests/cases/compiler/node_modules/styled-components/index").StyledInterface ->div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> +>div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> >`` : "" const B = styled.div``; >B : import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> >styled.div`` : import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> ->styled.div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> +>styled.div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> >styled : import("tests/cases/compiler/node_modules/styled-components/index").StyledInterface ->div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> +>div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> >`` : "" export const C = styled.div``; >C : import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> >styled.div`` : import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> ->styled.div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> +>styled.div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> >styled : import("tests/cases/compiler/node_modules/styled-components/index").StyledInterface ->div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> +>div : (a: TemplateStringsArray) => import("tests/cases/compiler/node_modules/styled-components/index").StyledComponent<"div", import("tests/cases/compiler/node_modules/styled-components/index").DefaultTheme, {}, never> >`` : "" export default Object.assign(A, { diff --git a/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt b/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt index e7e55ca0e1a5d..8b47606a1fd23 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt +++ b/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt @@ -41,7 +41,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts( a1(...array2); // Error parameter type is (number|string)[] ~~~~~~ !!! error TS2552: Cannot find name 'array2'. Did you mean 'Array'? -!!! related TS2728 /.ts/lib.es5.d.ts:1415:13: 'Array' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1416:13: 'Array' is declared here. a5([1, 2, "string", false, true]); // Error, parameter type is [any, any, [[any]]] ~~~~~~~~ !!! error TS2322: Type 'string' is not assignable to type '[[any]]'. diff --git a/tests/baselines/reference/destructuringTuple.errors.txt b/tests/baselines/reference/destructuringTuple.errors.txt index 7b9785db0f198..330cc6d405e4e 100644 --- a/tests/baselines/reference/destructuringTuple.errors.txt +++ b/tests/baselines/reference/destructuringTuple.errors.txt @@ -33,8 +33,8 @@ tests/cases/compiler/destructuringTuple.ts(11,60): error TS2769: No overload mat !!! error TS2769: Overload 2 of 3, '(callbackfn: (previousValue: [], currentValue: number, currentIndex: number, array: number[]) => [], initialValue: []): []', gave the following error. !!! error TS2769: Type 'never[]' is not assignable to type '[]'. !!! error TS2769: Target allows only 0 element(s) but source may have more. -!!! related TS6502 /.ts/lib.es5.d.ts:1380:24: The expected type comes from the return type of this signature. -!!! related TS6502 /.ts/lib.es5.d.ts:1386:27: The expected type comes from the return type of this signature. +!!! related TS6502 /.ts/lib.es5.d.ts:1381:24: The expected type comes from the return type of this signature. +!!! related TS6502 /.ts/lib.es5.d.ts:1387:27: The expected type comes from the return type of this signature. ~~ !!! error TS2769: No overload matches this call. !!! error TS2769: Overload 1 of 2, '(...items: ConcatArray[]): never[]', gave the following error. diff --git a/tests/baselines/reference/duplicateNumericIndexers.errors.txt b/tests/baselines/reference/duplicateNumericIndexers.errors.txt index 435a26293573c..9482fb75d2b52 100644 --- a/tests/baselines/reference/duplicateNumericIndexers.errors.txt +++ b/tests/baselines/reference/duplicateNumericIndexers.errors.txt @@ -11,7 +11,7 @@ tests/cases/conformance/types/members/duplicateNumericIndexers.ts(25,5): error T tests/cases/conformance/types/members/duplicateNumericIndexers.ts(29,5): error TS2374: Duplicate index signature for type 'number'. tests/cases/conformance/types/members/duplicateNumericIndexers.ts(30,5): error TS2374: Duplicate index signature for type 'number'. lib.es5.d.ts(514,5): error TS2374: Duplicate index signature for type 'number'. -lib.es5.d.ts(1401,5): error TS2374: Duplicate index signature for type 'number'. +lib.es5.d.ts(1402,5): error TS2374: Duplicate index signature for type 'number'. ==== tests/cases/conformance/types/members/duplicateNumericIndexers.ts (12 errors) ==== diff --git a/tests/baselines/reference/externModule.errors.txt b/tests/baselines/reference/externModule.errors.txt index 438db5d0e77bb..5f22ae9e390d4 100644 --- a/tests/baselines/reference/externModule.errors.txt +++ b/tests/baselines/reference/externModule.errors.txt @@ -66,20 +66,20 @@ tests/cases/compiler/externModule.ts(37,3): error TS2552: Cannot find name 'XDat var d=new XDate(); ~~~~~ !!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? -!!! related TS2728 /.ts/lib.es5.d.ts:907:13: 'Date' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:908:13: 'Date' is declared here. d.getDay(); d=new XDate(1978,2); ~~~~~ !!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? -!!! related TS2728 /.ts/lib.es5.d.ts:907:13: 'Date' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:908:13: 'Date' is declared here. d.getXDate(); var n=XDate.parse("3/2/2004"); ~~~~~ !!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? -!!! related TS2728 /.ts/lib.es5.d.ts:907:13: 'Date' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:908:13: 'Date' is declared here. n=XDate.UTC(1964,2,1); ~~~~~ !!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? -!!! related TS2728 /.ts/lib.es5.d.ts:907:13: 'Date' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:908:13: 'Date' is declared here. \ No newline at end of file diff --git a/tests/baselines/reference/genericTemplateOverloadResolution.types b/tests/baselines/reference/genericTemplateOverloadResolution.types index 64fac766d3468..d7d6ede64587f 100644 --- a/tests/baselines/reference/genericTemplateOverloadResolution.types +++ b/tests/baselines/reference/genericTemplateOverloadResolution.types @@ -1,10 +1,10 @@ === tests/cases/compiler/genericTemplateOverloadResolution.ts === interface IFooFn { (strings: TemplateStringsArray): Promise<{}>; ->strings : TemplateStringsArray +>strings : TemplateStringsArray (strings: TemplateStringsArray): Promise; ->strings : TemplateStringsArray +>strings : TemplateStringsArray } declare const fooFn: IFooFn; diff --git a/tests/baselines/reference/importHelpers.types b/tests/baselines/reference/importHelpers.types index 8c1f87947f7ad..33c226ad3b652 100644 --- a/tests/baselines/reference/importHelpers.types +++ b/tests/baselines/reference/importHelpers.types @@ -31,8 +31,8 @@ function id(x: T) { } export const result = id`hello world`; ->result : TemplateStringsArray ->id`hello world` : TemplateStringsArray +>result : TemplateStringsArray<["hello world"], ["hello world"]> +>id`hello world` : TemplateStringsArray<["hello world"], ["hello world"]> >id : (x: T) => T >`hello world` : "hello world" @@ -69,8 +69,8 @@ function id(x: T) { } const result = id`hello world`; ->result : TemplateStringsArray ->id`hello world` : TemplateStringsArray +>result : TemplateStringsArray<["hello world"], ["hello world"]> +>id`hello world` : TemplateStringsArray<["hello world"], ["hello world"]> >id : (x: T) => T >`hello world` : "hello world" diff --git a/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty.errors.txt b/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty.errors.txt index 5775ef42eddb1..5bccd8caa1a24 100644 --- a/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty.errors.txt +++ b/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty.errors.txt @@ -7,5 +7,5 @@ tests/cases/compiler/mappedTypeWithAsClauseAndLateBoundProperty.ts(3,1): error T tgt2 = src2; // Should error ~~~~ !!! error TS2741: Property 'length' is missing in type '{ [x: number]: number; toString: () => string; toLocaleString: () => string; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray[]): number[]; (...items: (number | ConcatArray)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { (predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: (callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { (predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { (predicate: (this: void, value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator; values: () => IterableIterator; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: (callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: (this: A, depth?: D) => FlatArray[]; [iterator]: () => IterableIterator; [unscopables]: () => { copyWithin: boolean; entries: boolean; fill: boolean; find: boolean; findIndex: boolean; keys: boolean; values: boolean; }; }' but required in type 'number[]'. -!!! related TS2728 /.ts/lib.es5.d.ts:1224:5: 'length' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1225:5: 'length' is declared here. \ No newline at end of file diff --git a/tests/baselines/reference/narrowExceptionVariableInCatchClause.errors.txt b/tests/baselines/reference/narrowExceptionVariableInCatchClause.errors.txt index c5a85483631f2..ab2fb91ba7554 100644 --- a/tests/baselines/reference/narrowExceptionVariableInCatchClause.errors.txt +++ b/tests/baselines/reference/narrowExceptionVariableInCatchClause.errors.txt @@ -24,7 +24,7 @@ tests/cases/conformance/types/any/narrowExceptionVariableInCatchClause.ts(16,17) err.massage; // ERROR: Property 'massage' does not exist on type 'Error' ~~~~~~~ !!! error TS2551: Property 'massage' does not exist on type 'Error'. Did you mean 'message'? -!!! related TS2728 /.ts/lib.es5.d.ts:974:5: 'message' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:975:5: 'message' is declared here. } else { diff --git a/tests/baselines/reference/narrowFromAnyWithInstanceof.errors.txt b/tests/baselines/reference/narrowFromAnyWithInstanceof.errors.txt index 6e7ae406bcfa0..9d699d7ee56c7 100644 --- a/tests/baselines/reference/narrowFromAnyWithInstanceof.errors.txt +++ b/tests/baselines/reference/narrowFromAnyWithInstanceof.errors.txt @@ -22,7 +22,7 @@ tests/cases/conformance/types/any/narrowFromAnyWithInstanceof.ts(22,7): error TS x.mesage; ~~~~~~ !!! error TS2551: Property 'mesage' does not exist on type 'Error'. Did you mean 'message'? -!!! related TS2728 /.ts/lib.es5.d.ts:974:5: 'message' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:975:5: 'message' is declared here. } if (x instanceof Date) { @@ -30,6 +30,6 @@ tests/cases/conformance/types/any/narrowFromAnyWithInstanceof.ts(22,7): error TS x.getHuors(); ~~~~~~~~ !!! error TS2551: Property 'getHuors' does not exist on type 'Date'. Did you mean 'getHours'? -!!! related TS2728 /.ts/lib.es5.d.ts:763:5: 'getHours' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:764:5: 'getHours' is declared here. } \ No newline at end of file diff --git a/tests/baselines/reference/narrowFromAnyWithTypePredicate.errors.txt b/tests/baselines/reference/narrowFromAnyWithTypePredicate.errors.txt index 274c0bcbe1373..999ace47e82e8 100644 --- a/tests/baselines/reference/narrowFromAnyWithTypePredicate.errors.txt +++ b/tests/baselines/reference/narrowFromAnyWithTypePredicate.errors.txt @@ -41,7 +41,7 @@ tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts(33,7): error x.mesage; ~~~~~~ !!! error TS2551: Property 'mesage' does not exist on type 'Error'. Did you mean 'message'? -!!! related TS2728 /.ts/lib.es5.d.ts:974:5: 'message' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:975:5: 'message' is declared here. } if (isDate(x)) { @@ -49,6 +49,6 @@ tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts(33,7): error x.getHuors(); ~~~~~~~~ !!! error TS2551: Property 'getHuors' does not exist on type 'Date'. Did you mean 'getHours'? -!!! related TS2728 /.ts/lib.es5.d.ts:763:5: 'getHours' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:764:5: 'getHours' is declared here. } \ No newline at end of file diff --git a/tests/baselines/reference/parenthesizedContexualTyping3.types b/tests/baselines/reference/parenthesizedContexualTyping3.types index d43cd213b5697..b385728a241d6 100644 --- a/tests/baselines/reference/parenthesizedContexualTyping3.types +++ b/tests/baselines/reference/parenthesizedContexualTyping3.types @@ -5,15 +5,15 @@ * tempFun - Can't have fun for too long. */ function tempFun(tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } ->tempStrs : TemplateStringsArray +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempStrs : TemplateStringsArray >g : (x: T) => T >x : T >x : T function tempFun(tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } ->tempStrs : TemplateStringsArray +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempStrs : TemplateStringsArray >g : (x: T) => T >x : T >h : (y: T) => T @@ -21,8 +21,8 @@ function tempFun(tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => >x : T function tempFun(tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T { ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } ->tempStrs : TemplateStringsArray +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempStrs : TemplateStringsArray >g : (x: T) => T >x : T >x : T @@ -36,7 +36,7 @@ function tempFun(tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T { var a = tempFun `${ x => x } ${ 10 }` >a : number >tempFun `${ x => x } ${ 10 }` : number ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } >`${ x => x } ${ 10 }` : string >x => x : (x: number) => number >x : number @@ -46,7 +46,7 @@ var a = tempFun `${ x => x } ${ 10 }` var b = tempFun `${ (x => x) } ${ 10 }` >b : number >tempFun `${ (x => x) } ${ 10 }` : number ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } >`${ (x => x) } ${ 10 }` : string >(x => x) : (x: number) => number >x => x : (x: number) => number @@ -57,7 +57,7 @@ var b = tempFun `${ (x => x) } ${ 10 }` var c = tempFun `${ ((x => x)) } ${ 10 }` >c : number >tempFun `${ ((x => x)) } ${ 10 }` : number ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } >`${ ((x => x)) } ${ 10 }` : string >((x => x)) : (x: number) => number >(x => x) : (x: number) => number @@ -69,7 +69,7 @@ var c = tempFun `${ ((x => x)) } ${ 10 }` var d = tempFun `${ x => x } ${ x => x } ${ 10 }` >d : number >tempFun `${ x => x } ${ x => x } ${ 10 }` : number ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } >`${ x => x } ${ x => x } ${ 10 }` : string >x => x : (x: number) => number >x : number @@ -82,7 +82,7 @@ var d = tempFun `${ x => x } ${ x => x } ${ 10 }` var e = tempFun `${ x => x } ${ (x => x) } ${ 10 }` >e : number >tempFun `${ x => x } ${ (x => x) } ${ 10 }` : number ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } >`${ x => x } ${ (x => x) } ${ 10 }` : string >x => x : (x: number) => number >x : number @@ -96,7 +96,7 @@ var e = tempFun `${ x => x } ${ (x => x) } ${ 10 }` var f = tempFun `${ x => x } ${ ((x => x)) } ${ 10 }` >f : number >tempFun `${ x => x } ${ ((x => x)) } ${ 10 }` : number ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } >`${ x => x } ${ ((x => x)) } ${ 10 }` : string >x => x : (x: number) => number >x : number @@ -111,7 +111,7 @@ var f = tempFun `${ x => x } ${ ((x => x)) } ${ 10 }` var g = tempFun `${ (x => x) } ${ (((x => x))) } ${ 10 }` >g : number >tempFun `${ (x => x) } ${ (((x => x))) } ${ 10 }` : number ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } >`${ (x => x) } ${ (((x => x))) } ${ 10 }` : string >(x => x) : (x: number) => number >x => x : (x: number) => number @@ -128,7 +128,7 @@ var g = tempFun `${ (x => x) } ${ (((x => x))) } ${ 10 }` var h = tempFun `${ (x => x) } ${ (((x => x))) } ${ undefined }` >h : any >tempFun `${ (x => x) } ${ (((x => x))) } ${ undefined }` : any ->tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } +>tempFun : { (tempStrs: TemplateStringsArray, g: (x: T) => T, x: T): T; (tempStrs: TemplateStringsArray, g: (x: T) => T, h: (y: T) => T, x: T): T; } >`${ (x => x) } ${ (((x => x))) } ${ undefined }` : string >(x => x) : (x: any) => any >x => x : (x: any) => any diff --git a/tests/baselines/reference/parserS7.2_A1.5_T2.errors.txt b/tests/baselines/reference/parserS7.2_A1.5_T2.errors.txt index e699649181895..8aec0ace55d19 100644 --- a/tests/baselines/reference/parserS7.2_A1.5_T2.errors.txt +++ b/tests/baselines/reference/parserS7.2_A1.5_T2.errors.txt @@ -19,7 +19,7 @@ tests/cases/conformance/parser/ecmascript5/parserS7.2_A1.5_T2.ts(20,3): error TS $ERROR('#1: eval("\\u00A0var x\\u00A0= 1\\u00A0"); x === 1. Actual: ' + (x)); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } //CHECK#2 @@ -28,7 +28,7 @@ tests/cases/conformance/parser/ecmascript5/parserS7.2_A1.5_T2.ts(20,3): error TS $ERROR('#2:  var x = 1 ; x === 1. Actual: ' + (x)); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } diff --git a/tests/baselines/reference/parserS7.3_A1.1_T2.errors.txt b/tests/baselines/reference/parserS7.3_A1.1_T2.errors.txt index 72a6b13b60828..64c5e7f40d2d7 100644 --- a/tests/baselines/reference/parserS7.3_A1.1_T2.errors.txt +++ b/tests/baselines/reference/parserS7.3_A1.1_T2.errors.txt @@ -21,7 +21,7 @@ tests/cases/conformance/parser/ecmascript5/parserS7.3_A1.1_T2.ts(17,3): error TS $ERROR('#1: var\\nx\\n=\\n1\\n; x === 1. Actual: ' + (x)); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } \ No newline at end of file diff --git a/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt b/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt index 38fb5e321d2d6..57bb249c67a28 100644 --- a/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt +++ b/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt @@ -50,70 +50,70 @@ tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(142,3): error T $ERROR('#А'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0411 = 1; if (Б !== 1) { $ERROR('#Б'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0412 = 1; if (В !== 1) { $ERROR('#В'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0413 = 1; if (Г !== 1) { $ERROR('#Г'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0414 = 1; if (Д !== 1) { $ERROR('#Д'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0415 = 1; if (Е !== 1) { $ERROR('#Е'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0416 = 1; if (Ж !== 1) { $ERROR('#Ж'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0417 = 1; if (З !== 1) { $ERROR('#З'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0418 = 1; if (И !== 1) { $ERROR('#И'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0419 = 1; if (Й !== 1) { $ERROR('#Й'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u041A = 1; if (К !== 1) { diff --git a/tests/baselines/reference/parserUnicode1.errors.txt b/tests/baselines/reference/parserUnicode1.errors.txt index 4bcc26a643418..d3441ca7f18d9 100644 --- a/tests/baselines/reference/parserUnicode1.errors.txt +++ b/tests/baselines/reference/parserUnicode1.errors.txt @@ -11,13 +11,13 @@ tests/cases/conformance/parser/ecmascript5/parserUnicode1.ts(10,5): error TS2552 $ERROR('#6.1: var \\u0078x = 1; xx === 6. Actual: ' + (xx)); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } } catch (e) { $ERROR('#6.2: var \\u0078x = 1; xx === 6. Actual: ' + (xx)); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } \ No newline at end of file diff --git a/tests/baselines/reference/promisePermutations.errors.txt b/tests/baselines/reference/promisePermutations.errors.txt index bcceb3790cc37..943285ecd8844 100644 --- a/tests/baselines/reference/promisePermutations.errors.txt +++ b/tests/baselines/reference/promisePermutations.errors.txt @@ -447,7 +447,7 @@ tests/cases/compiler/promisePermutations.ts(160,21): error TS2769: No overload m !!! error TS2769: The last overload gave the following error. !!! error TS2769: Argument of type '(x: any) => IPromise' is not assignable to parameter of type '(error: any) => Promise'. !!! error TS2769: Property 'catch' is missing in type 'IPromise' but required in type 'Promise'. -!!! related TS2728 /.ts/lib.es5.d.ts:1460:5: 'catch' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1461:5: 'catch' is declared here. !!! related TS2771 tests/cases/compiler/promisePermutations.ts:5:5: The last overload is declared here. var s10g = s10.then(testFunctionP, nIPromise, sIPromise).then(sPromise, sIPromise, sIPromise); // ok diff --git a/tests/baselines/reference/promisePermutations2.errors.txt b/tests/baselines/reference/promisePermutations2.errors.txt index 053bc3c1a8751..099051c347943 100644 --- a/tests/baselines/reference/promisePermutations2.errors.txt +++ b/tests/baselines/reference/promisePermutations2.errors.txt @@ -351,7 +351,7 @@ tests/cases/compiler/promisePermutations2.ts(159,21): error TS2345: Argument of ~~~~~~~~~ !!! error TS2345: Argument of type '(x: any) => IPromise' is not assignable to parameter of type '(error: any) => Promise'. !!! error TS2345: Property 'catch' is missing in type 'IPromise' but required in type 'Promise'. -!!! related TS2728 /.ts/lib.es5.d.ts:1460:5: 'catch' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1461:5: 'catch' is declared here. var s10g = s10.then(testFunctionP, nIPromise, sIPromise).then(sPromise, sIPromise, sIPromise); // ok var r11: IPromise; diff --git a/tests/baselines/reference/promisePermutations3.errors.txt b/tests/baselines/reference/promisePermutations3.errors.txt index 3303c1e3a094b..2ae92e7a710ed 100644 --- a/tests/baselines/reference/promisePermutations3.errors.txt +++ b/tests/baselines/reference/promisePermutations3.errors.txt @@ -398,7 +398,7 @@ tests/cases/compiler/promisePermutations3.ts(165,21): error TS2345: Argument of !!! error TS2769: The last overload gave the following error. !!! error TS2769: Argument of type '(x: any) => IPromise' is not assignable to parameter of type '(error: any) => Promise'. !!! error TS2769: Property 'catch' is missing in type 'IPromise' but required in type 'Promise'. -!!! related TS2728 /.ts/lib.es5.d.ts:1460:5: 'catch' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1461:5: 'catch' is declared here. !!! related TS2771 tests/cases/compiler/promisePermutations3.ts:7:5: The last overload is declared here. var s10g = s10.then(testFunctionP, nIPromise, sIPromise).then(sPromise, sIPromise, sIPromise); // ok @@ -445,5 +445,5 @@ tests/cases/compiler/promisePermutations3.ts(165,21): error TS2345: Argument of ~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type '{ (x: T): IPromise; (x: T, y: T): Promise; }' is not assignable to parameter of type '(value: (x: any) => any) => Promise'. !!! error TS2345: Property 'catch' is missing in type 'IPromise' but required in type 'Promise'. -!!! related TS2728 /.ts/lib.es5.d.ts:1460:5: 'catch' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1461:5: 'catch' is declared here. var s12c = s12.then(testFunction12P, testFunction12, testFunction12); // ok \ No newline at end of file diff --git a/tests/baselines/reference/redefineArray.errors.txt b/tests/baselines/reference/redefineArray.errors.txt index 55390de55ae7b..948da22383e1f 100644 --- a/tests/baselines/reference/redefineArray.errors.txt +++ b/tests/baselines/reference/redefineArray.errors.txt @@ -5,4 +5,4 @@ tests/cases/compiler/redefineArray.ts(1,1): error TS2741: Property 'isArray' is Array = function (n:number, s:string) {return n;}; ~~~~~ !!! error TS2741: Property 'isArray' is missing in type '(n: number, s: string) => number' but required in type 'ArrayConstructor'. -!!! related TS2728 /.ts/lib.es5.d.ts:1411:5: 'isArray' is declared here. \ No newline at end of file +!!! related TS2728 /.ts/lib.es5.d.ts:1412:5: 'isArray' is declared here. \ No newline at end of file diff --git a/tests/baselines/reference/scannerS7.2_A1.5_T2.errors.txt b/tests/baselines/reference/scannerS7.2_A1.5_T2.errors.txt index 575b38c483288..560f256526630 100644 --- a/tests/baselines/reference/scannerS7.2_A1.5_T2.errors.txt +++ b/tests/baselines/reference/scannerS7.2_A1.5_T2.errors.txt @@ -19,7 +19,7 @@ tests/cases/conformance/scanner/ecmascript5/scannerS7.2_A1.5_T2.ts(20,3): error $ERROR('#1: eval("\\u00A0var x\\u00A0= 1\\u00A0"); x === 1. Actual: ' + (x)); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } //CHECK#2 @@ -28,7 +28,7 @@ tests/cases/conformance/scanner/ecmascript5/scannerS7.2_A1.5_T2.ts(20,3): error $ERROR('#2:  var x = 1 ; x === 1. Actual: ' + (x)); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } diff --git a/tests/baselines/reference/scannerS7.3_A1.1_T2.errors.txt b/tests/baselines/reference/scannerS7.3_A1.1_T2.errors.txt index 63c080074f099..f832b453639fa 100644 --- a/tests/baselines/reference/scannerS7.3_A1.1_T2.errors.txt +++ b/tests/baselines/reference/scannerS7.3_A1.1_T2.errors.txt @@ -21,7 +21,7 @@ tests/cases/conformance/scanner/ecmascript5/scannerS7.3_A1.1_T2.ts(17,3): error $ERROR('#1: var\\nx\\n=\\n1\\n; x === 1. Actual: ' + (x)); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } \ No newline at end of file diff --git a/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt b/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt index 382c345b12c3f..fc98a593ad971 100644 --- a/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt +++ b/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt @@ -50,70 +50,70 @@ tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(142,3): error $ERROR('#А'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0411 = 1; if (Б !== 1) { $ERROR('#Б'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0412 = 1; if (В !== 1) { $ERROR('#В'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0413 = 1; if (Г !== 1) { $ERROR('#Г'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0414 = 1; if (Д !== 1) { $ERROR('#Д'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0415 = 1; if (Е !== 1) { $ERROR('#Е'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0416 = 1; if (Ж !== 1) { $ERROR('#Ж'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0417 = 1; if (З !== 1) { $ERROR('#З'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0418 = 1; if (И !== 1) { $ERROR('#И'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u0419 = 1; if (Й !== 1) { $ERROR('#Й'); ~~~~~~ !!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -!!! related TS2728 /.ts/lib.es5.d.ts:984:13: 'Error' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:985:13: 'Error' is declared here. } var \u041A = 1; if (К !== 1) { diff --git a/tests/baselines/reference/taggedTemplateContextualTyping1.types b/tests/baselines/reference/taggedTemplateContextualTyping1.types index 84af70b5b88cd..fb3a9171c2471 100644 --- a/tests/baselines/reference/taggedTemplateContextualTyping1.types +++ b/tests/baselines/reference/taggedTemplateContextualTyping1.types @@ -6,20 +6,20 @@ type FuncType = (x: (p: T) => T) => typeof x; >x : (p: T) => T function tempTag1(templateStrs: TemplateStringsArray, f: FuncType, x: T): T; ->tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } ->templateStrs : TemplateStringsArray +>tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } +>templateStrs : TemplateStringsArray >f : FuncType >x : T function tempTag1(templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; ->tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } ->templateStrs : TemplateStringsArray +>tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } +>templateStrs : TemplateStringsArray >f : FuncType >h : FuncType >x : T function tempTag1(...rest: any[]): T { ->tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } +>tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } >rest : any[] return undefined; @@ -32,7 +32,7 @@ function tempTag1(...rest: any[]): T { // so this test will error. tempTag1 `${ x => { x(undefined); return x; } }${ 10 }`; >tempTag1 `${ x => { x(undefined); return x; } }${ 10 }` : 10 ->tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } +>tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } >`${ x => { x(undefined); return x; } }${ 10 }` : string >x => { x(undefined); return x; } : (x: (p: T) => T) => (p: T) => T >x : (p: T) => T @@ -44,7 +44,7 @@ tempTag1 `${ x => { x(undefined); return x; } }${ 10 } tempTag1 `${ x => { x(undefined); return x; } }${ y => { y(undefined); return y; } }${ 10 }`; >tempTag1 `${ x => { x(undefined); return x; } }${ y => { y(undefined); return y; } }${ 10 }` : 10 ->tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } +>tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } >`${ x => { x(undefined); return x; } }${ y => { y(undefined); return y; } }${ 10 }` : string >x => { x(undefined); return x; } : (x: (p: T) => T) => (p: T) => T >x : (p: T) => T @@ -62,7 +62,7 @@ tempTag1 `${ x => { x(undefined); return x; } }${ y => tempTag1 `${ x => { x(undefined); return x; } }${ (y: (p: T) => T) => { y(undefined); return y } }${ undefined }`; >tempTag1 `${ x => { x(undefined); return x; } }${ (y: (p: T) => T) => { y(undefined); return y } }${ undefined }` : any ->tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } +>tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } >`${ x => { x(undefined); return x; } }${ (y: (p: T) => T) => { y(undefined); return y } }${ undefined }` : string >x => { x(undefined); return x; } : (x: (p: T) => T) => (p: T) => T >x : (p: T) => T @@ -81,7 +81,7 @@ tempTag1 `${ x => { x(undefined); return x; } }${ (y: tempTag1 `${ (x: (p: T) => T) => { x(undefined); return x; } }${ y => { y(undefined); return y; } }${ undefined }`; >tempTag1 `${ (x: (p: T) => T) => { x(undefined); return x; } }${ y => { y(undefined); return y; } }${ undefined }` : any ->tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } +>tempTag1 : { (templateStrs: TemplateStringsArray, f: FuncType, x: T): T; (templateStrs: TemplateStringsArray, f: FuncType, h: FuncType, x: T): T; } >`${ (x: (p: T) => T) => { x(undefined); return x; } }${ y => { y(undefined); return y; } }${ undefined }` : string >(x: (p: T) => T) => { x(undefined); return x; } : (x: (p: T) => T) => (p: T) => T >x : (p: T) => T diff --git a/tests/baselines/reference/taggedTemplateContextualTyping2.types b/tests/baselines/reference/taggedTemplateContextualTyping2.types index d182bb526a882..a34586be3beec 100644 --- a/tests/baselines/reference/taggedTemplateContextualTyping2.types +++ b/tests/baselines/reference/taggedTemplateContextualTyping2.types @@ -12,20 +12,20 @@ type FuncType2 = (x: (p: T) => T) => typeof x; >x : (p: T) => T function tempTag2(templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; ->tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } ->templateStrs : TemplateStringsArray +>tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } +>templateStrs : TemplateStringsArray >f : FuncType1 >x : number function tempTag2(templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; ->tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } ->templateStrs : TemplateStringsArray +>tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } +>templateStrs : TemplateStringsArray >f : FuncType2 >h : FuncType2 >x : string function tempTag2(...rest: any[]): any { ->tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } +>tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } >rest : any[] return undefined; @@ -38,7 +38,7 @@ function tempTag2(...rest: any[]): any { // so this test will error. tempTag2 `${ x => { x(undefined); return x; } }${ 0 }`; >tempTag2 `${ x => { x(undefined); return x; } }${ 0 }` : number ->tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } +>tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } >`${ x => { x(undefined); return x; } }${ 0 }` : string >x => { x(undefined); return x; } : (x: (p: T) => T) => (p: T) => T >x : (p: T) => T @@ -50,7 +50,7 @@ tempTag2 `${ x => { x(undefined); return x; } }${ 0 }`; tempTag2 `${ x => { x(undefined); return x; } }${ y => { y(null); return y; } }${ "hello" }`; >tempTag2 `${ x => { x(undefined); return x; } }${ y => { y(null); return y; } }${ "hello" }` : string ->tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } +>tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } >`${ x => { x(undefined); return x; } }${ y => { y(null); return y; } }${ "hello" }` : string >x => { x(undefined); return x; } : (x: (p: T) => T) => (p: T) => T >x : (p: T) => T @@ -68,7 +68,7 @@ tempTag2 `${ x => { x(undefined); return x; } }${ y => { y { x(undefined); return x; } }${ undefined }${ "hello" }`; >tempTag2 `${ x => { x(undefined); return x; } }${ undefined }${ "hello" }` : string ->tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } +>tempTag2 : { (templateStrs: TemplateStringsArray, f: FuncType1, x: number): number; (templateStrs: TemplateStringsArray, f: FuncType2, h: FuncType2, x: string): string; } >`${ x => { x(undefined); return x; } }${ undefined }${ "hello" }` : string >x => { x(undefined); return x; } : (x: (p: T) => T) => (p: T) => T >x : (p: T) => T diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.errors.txt b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.errors.txt index efbee889ffb59..5c44853218621 100644 --- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.errors.txt @@ -1,9 +1,11 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(62,36): error TS2345: Argument of type '0' is not assignable to parameter of type '""'. tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(63,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'a9a' must be of type 'string', but here has type '{}'. tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(76,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'a9e' must be of type '{ x: number; z: Date; y?: undefined; } | { x: number; y: string; z?: undefined; }', but here has type '{}'. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(96,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'a10a' must be of type '{ parts: ["part1", "part2", "part3", ""]; args: [string, number, any[]]; }', but here has type '{}'. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts(99,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'a10b' must be of type '{ parts: ["no substitution"]; args: []; }', but here has type '{}'. -==== tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts (3 errors) ==== +==== tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts (5 errors) ==== // Generic tag with one parameter function noParams(n: T) { } noParams ``; @@ -102,4 +104,20 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference var arr = someGenerics9 `${ [] }${ null }${ undefined }`; var arr: any[]; + // Generic tag with a generic type for TemplateStringsArray + function someGenerics10(strs: TemplateStringsArray, ...args: U): {parts: T; args: U} { + return null; + } + var a10a = someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }`; + var a10a: {}; + ~~~~ +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a10a' must be of type '{ parts: ["part1", "part2", "part3", ""]; args: [string, number, any[]]; }', but here has type '{}'. +!!! related TS6203 tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts:95:5: 'a10a' was also declared here. + + var a10b = someGenerics10 `no substitution`; + var a10b: {}; + ~~~~ +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a10b' must be of type '{ parts: ["no substitution"]; args: []; }', but here has type '{}'. +!!! related TS6203 tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts:98:5: 'a10b' was also declared here. + \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.js b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.js index 7e50da9c06aaf..0a7ec4fab084c 100644 --- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.js +++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.js @@ -89,6 +89,16 @@ var a: any; var arr = someGenerics9 `${ [] }${ null }${ undefined }`; var arr: any[]; +// Generic tag with a generic type for TemplateStringsArray +function someGenerics10(strs: TemplateStringsArray, ...args: U): {parts: T; args: U} { + return null; +} +var a10a = someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }`; +var a10a: {}; + +var a10b = someGenerics10 `no substitution`; +var a10b: {}; + //// [taggedTemplateStringsTypeArgumentInference.js] @@ -159,3 +169,15 @@ var a; // Generic tag with multiple parameters of generic type where one argument is [] and the other is not 'any' var arr = someGenerics9(__makeTemplateObject(["", "", "", ""], ["", "", "", ""]), [], null, undefined); var arr; +// Generic tag with a generic type for TemplateStringsArray +function someGenerics10(strs) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return null; +} +var a10a = someGenerics10(__makeTemplateObject(["part1", "part2", "part3", ""], ["part1", "part2", "part3", ""]), '', 0, []); +var a10a; +var a10b = someGenerics10(__makeTemplateObject(["no substitution"], ["no substitution"])); +var a10b; diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.symbols b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.symbols index a3b24b33b48dd..01e443b533537 100644 --- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.symbols +++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.symbols @@ -342,4 +342,35 @@ var arr = someGenerics9 `${ [] }${ null }${ undefined }`; var arr: any[]; >arr : Symbol(arr, Decl(taggedTemplateStringsTypeArgumentInference.ts, 87, 3), Decl(taggedTemplateStringsTypeArgumentInference.ts, 88, 3)) +// Generic tag with a generic type for TemplateStringsArray +function someGenerics10(strs: TemplateStringsArray, ...args: U): {parts: T; args: U} { +>someGenerics10 : Symbol(someGenerics10, Decl(taggedTemplateStringsTypeArgumentInference.ts, 88, 15)) +>T : Symbol(T, Decl(taggedTemplateStringsTypeArgumentInference.ts, 91, 24)) +>U : Symbol(U, Decl(taggedTemplateStringsTypeArgumentInference.ts, 91, 52)) +>strs : Symbol(strs, Decl(taggedTemplateStringsTypeArgumentInference.ts, 91, 83)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(taggedTemplateStringsTypeArgumentInference.ts, 91, 24)) +>args : Symbol(args, Decl(taggedTemplateStringsTypeArgumentInference.ts, 91, 113)) +>U : Symbol(U, Decl(taggedTemplateStringsTypeArgumentInference.ts, 91, 52)) +>parts : Symbol(parts, Decl(taggedTemplateStringsTypeArgumentInference.ts, 91, 128)) +>T : Symbol(T, Decl(taggedTemplateStringsTypeArgumentInference.ts, 91, 24)) +>args : Symbol(args, Decl(taggedTemplateStringsTypeArgumentInference.ts, 91, 137)) +>U : Symbol(U, Decl(taggedTemplateStringsTypeArgumentInference.ts, 91, 52)) + + return null; +} +var a10a = someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }`; +>a10a : Symbol(a10a, Decl(taggedTemplateStringsTypeArgumentInference.ts, 94, 3), Decl(taggedTemplateStringsTypeArgumentInference.ts, 95, 3)) +>someGenerics10 : Symbol(someGenerics10, Decl(taggedTemplateStringsTypeArgumentInference.ts, 88, 15)) + +var a10a: {}; +>a10a : Symbol(a10a, Decl(taggedTemplateStringsTypeArgumentInference.ts, 94, 3), Decl(taggedTemplateStringsTypeArgumentInference.ts, 95, 3)) + +var a10b = someGenerics10 `no substitution`; +>a10b : Symbol(a10b, Decl(taggedTemplateStringsTypeArgumentInference.ts, 97, 3), Decl(taggedTemplateStringsTypeArgumentInference.ts, 98, 3)) +>someGenerics10 : Symbol(someGenerics10, Decl(taggedTemplateStringsTypeArgumentInference.ts, 88, 15)) + +var a10b: {}; +>a10b : Symbol(a10b, Decl(taggedTemplateStringsTypeArgumentInference.ts, 97, 3), Decl(taggedTemplateStringsTypeArgumentInference.ts, 98, 3)) + diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.types b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.types index 114b37d1cf2e2..a2a93fd02904f 100644 --- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.types +++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInference.types @@ -12,11 +12,11 @@ noParams ``; // Generic tag with parameter which does not use type parameter function noGenericParams(n: TemplateStringsArray) { } >noGenericParams : (n: TemplateStringsArray) => void ->n : TemplateStringsArray +>n : TemplateStringsArray noGenericParams ``; >noGenericParams `` : void ->noGenericParams : (n: TemplateStringsArray) => void +>noGenericParams : (n: TemplateStringsArray) => void >`` : "" // Generic tag with multiple type parameters and only one used in parameter type annotation @@ -33,25 +33,25 @@ someGenerics1a `${3}`; function someGenerics1b(n: TemplateStringsArray, m: U) { } >someGenerics1b : (n: TemplateStringsArray, m: U) => void ->n : TemplateStringsArray +>n : TemplateStringsArray >m : U someGenerics1b `${3}`; >someGenerics1b `${3}` : void ->someGenerics1b : (n: TemplateStringsArray, m: U) => void +>someGenerics1b : (n: TemplateStringsArray, m: U) => void >`${3}` : string >3 : 3 // Generic tag with argument of function type whose parameter is of type parameter type function someGenerics2a(strs: TemplateStringsArray, n: (x: T) => void) { } >someGenerics2a : (strs: TemplateStringsArray, n: (x: T) => void) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >n : (x: T) => void >x : T someGenerics2a `${(n: string) => n}`; >someGenerics2a `${(n: string) => n}` : void ->someGenerics2a : (strs: TemplateStringsArray, n: (x: T) => void) => void +>someGenerics2a : (strs: TemplateStringsArray, n: (x: T) => void) => void >`${(n: string) => n}` : string >(n: string) => n : (n: string) => string >n : string @@ -59,14 +59,14 @@ someGenerics2a `${(n: string) => n}`; function someGenerics2b(strs: TemplateStringsArray, n: (x: T, y: U) => void) { } >someGenerics2b : (strs: TemplateStringsArray, n: (x: T, y: U) => void) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >n : (x: T, y: U) => void >x : T >y : U someGenerics2b `${ (n: string, x: number) => n }`; >someGenerics2b `${ (n: string, x: number) => n }` : void ->someGenerics2b : (strs: TemplateStringsArray, n: (x: T, y: U) => void) => void +>someGenerics2b : (strs: TemplateStringsArray, n: (x: T, y: U) => void) => void >`${ (n: string, x: number) => n }` : string >(n: string, x: number) => n : (n: string, x: number) => string >n : string @@ -76,26 +76,26 @@ someGenerics2b `${ (n: string, x: number) => n }`; // Generic tag with argument of function type whose parameter is not of type parameter type but body/return type uses type parameter function someGenerics3(strs: TemplateStringsArray, producer: () => T) { } >someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >producer : () => T someGenerics3 `${() => ''}`; >someGenerics3 `${() => ''}` : void ->someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void +>someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void >`${() => ''}` : string >() => '' : () => string >'' : "" someGenerics3 `${() => undefined}`; >someGenerics3 `${() => undefined}` : void ->someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void +>someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void >`${() => undefined}` : string >() => undefined : () => any >undefined : undefined someGenerics3 `${() => 3}`; >someGenerics3 `${() => 3}` : void ->someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void +>someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void >`${() => 3}` : string >() => 3 : () => number >3 : 3 @@ -103,14 +103,14 @@ someGenerics3 `${() => 3}`; // 2 parameter generic tag with argument 1 of type parameter type and argument 2 of function type whose parameter is of type parameter type function someGenerics4(strs: TemplateStringsArray, n: T, f: (x: U) => void) { } >someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >n : T >f : (x: U) => void >x : U someGenerics4 `${4}${ () => null }`; >someGenerics4 `${4}${ () => null }` : void ->someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${4}${ () => null }` : string >4 : 4 >() => null : () => any @@ -118,7 +118,7 @@ someGenerics4 `${4}${ () => null }`; someGenerics4 `${''}${ () => 3 }`; >someGenerics4 `${''}${ () => 3 }` : void ->someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${''}${ () => 3 }` : string >'' : "" >() => 3 : () => number @@ -126,7 +126,7 @@ someGenerics4 `${''}${ () => 3 }`; someGenerics4 `${ null }${ null }`; >someGenerics4 `${ null }${ null }` : void ->someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${ null }${ null }` : string >null : null >null : null @@ -134,14 +134,14 @@ someGenerics4 `${ null }${ null }`; // 2 parameter generic tag with argument 2 of type parameter type and argument 1 of function type whose parameter is of type parameter type function someGenerics5(strs: TemplateStringsArray, n: T, f: (x: U) => void) { } >someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >n : T >f : (x: U) => void >x : U someGenerics5 `${ 4 } ${ () => null }`; >someGenerics5 `${ 4 } ${ () => null }` : void ->someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${ 4 } ${ () => null }` : string >4 : 4 >() => null : () => any @@ -149,7 +149,7 @@ someGenerics5 `${ 4 } ${ () => null }`; someGenerics5 `${ '' }${ () => 3 }`; >someGenerics5 `${ '' }${ () => 3 }` : void ->someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${ '' }${ () => 3 }` : string >'' : "" >() => 3 : () => number @@ -157,7 +157,7 @@ someGenerics5 `${ '' }${ () => 3 }`; someGenerics5 `${null}${null}`; >someGenerics5 `${null}${null}` : void ->someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${null}${null}` : string >null : null >null : null @@ -165,7 +165,7 @@ someGenerics5 `${null}${null}`; // Generic tag with multiple arguments of function types that each have parameters of the same generic type function someGenerics6(strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) { } >someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >a : (a: A) => A >a : A >b : (b: A) => A @@ -175,7 +175,7 @@ function someGenerics6(strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) someGenerics6 `${ n => n }${ n => n}${ n => n}`; >someGenerics6 `${ n => n }${ n => n}${ n => n}` : void ->someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void +>someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void >`${ n => n }${ n => n}${ n => n}` : string >n => n : (n: unknown) => unknown >n : unknown @@ -189,7 +189,7 @@ someGenerics6 `${ n => n }${ n => n}${ n => n}`; someGenerics6 `${ n => n }${ n => n}${ n => n}`; >someGenerics6 `${ n => n }${ n => n}${ n => n}` : void ->someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void +>someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void >`${ n => n }${ n => n}${ n => n}` : string >n => n : (n: unknown) => unknown >n : unknown @@ -203,7 +203,7 @@ someGenerics6 `${ n => n }${ n => n}${ n => n}`; someGenerics6 `${ (n: number) => n }${ (n: number) => n }${ (n: number) => n }`; >someGenerics6 `${ (n: number) => n }${ (n: number) => n }${ (n: number) => n }` : void ->someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void +>someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void >`${ (n: number) => n }${ (n: number) => n }${ (n: number) => n }` : string >(n: number) => n : (n: number) => number >n : number @@ -218,7 +218,7 @@ someGenerics6 `${ (n: number) => n }${ (n: number) => n }${ (n: number) => n }`; // Generic tag with multiple arguments of function types that each have parameters of different generic type function someGenerics7(strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) { } >someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >a : (a: A) => A >a : A >b : (b: B) => B @@ -228,7 +228,7 @@ function someGenerics7(strs: TemplateStringsArray, a: (a: A) => A, b: ( someGenerics7 `${ n => n }${ n => n }${ n => n }`; >someGenerics7 `${ n => n }${ n => n }${ n => n }` : void ->someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void >`${ n => n }${ n => n }${ n => n }` : string >n => n : (n: unknown) => unknown >n : unknown @@ -242,7 +242,7 @@ someGenerics7 `${ n => n }${ n => n }${ n => n }`; someGenerics7 `${ n => n }${ n => n }${ n => n }`; >someGenerics7 `${ n => n }${ n => n }${ n => n }` : void ->someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void >`${ n => n }${ n => n }${ n => n }` : string >n => n : (n: unknown) => unknown >n : unknown @@ -256,7 +256,7 @@ someGenerics7 `${ n => n }${ n => n }${ n => n }`; someGenerics7 `${(n: number) => n}${ (n: string) => n}${ (n: number) => n}`; >someGenerics7 `${(n: number) => n}${ (n: string) => n}${ (n: number) => n}` : void ->someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void >`${(n: number) => n}${ (n: string) => n}${ (n: number) => n}` : string >(n: number) => n : (n: number) => number >n : number @@ -271,20 +271,20 @@ someGenerics7 `${(n: number) => n}${ (n: string) => n}${ (n: number) => n}`; // Generic tag with argument of generic function type function someGenerics8(strs: TemplateStringsArray, n: T): T { return n; } >someGenerics8 : (strs: TemplateStringsArray, n: T) => T ->strs : TemplateStringsArray +>strs : TemplateStringsArray >n : T >n : T var x = someGenerics8 `${ someGenerics7 }`; ->x : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void ->someGenerics8 `${ someGenerics7 }` : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void ->someGenerics8 : (strs: TemplateStringsArray, n: T) => T +>x : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics8 `${ someGenerics7 }` : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics8 : (strs: TemplateStringsArray, n: T) => T >`${ someGenerics7 }` : string ->someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void x `${null}${null}${null}`; >x `${null}${null}${null}` : void ->x : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>x : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void >`${null}${null}${null}` : string >null : null >null : null @@ -293,7 +293,7 @@ x `${null}${null}${null}`; // Generic tag with multiple parameters of generic type passed arguments with no best common type function someGenerics9(strs: TemplateStringsArray, a: T, b: T, c: T): T { >someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T ->strs : TemplateStringsArray +>strs : TemplateStringsArray >a : T >b : T >c : T @@ -304,7 +304,7 @@ function someGenerics9(strs: TemplateStringsArray, a: T, b: T, c: T): T { var a9a = someGenerics9 `${ '' }${ 0 }${ [] }`; >a9a : string >someGenerics9 `${ '' }${ 0 }${ [] }` : "" ->someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T +>someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T >`${ '' }${ 0 }${ [] }` : string >'' : "" >0 : 0 @@ -332,7 +332,7 @@ interface A92 { var a9e = someGenerics9 `${ undefined }${ { x: 6, z: new Date() } }${ { x: 6, y: '' } }`; >a9e : { x: number; z: Date; y?: undefined; } | { x: number; y: string; z?: undefined; } >someGenerics9 `${ undefined }${ { x: 6, z: new Date() } }${ { x: 6, y: '' } }` : { x: number; z: Date; y?: undefined; } | { x: number; y: string; z?: undefined; } ->someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T +>someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T >`${ undefined }${ { x: 6, z: new Date() } }${ { x: 6, y: '' } }` : string >undefined : undefined >{ x: 6, z: new Date() } : { x: number; z: Date; } @@ -354,7 +354,7 @@ var a9e: {}; var a9d = someGenerics9 `${ { x: 3 }}${ { x: 6 }}${ { x: 6 } }`; >a9d : { x: number; } >someGenerics9 `${ { x: 3 }}${ { x: 6 }}${ { x: 6 } }` : { x: number; } ->someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T +>someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T >`${ { x: 3 }}${ { x: 6 }}${ { x: 6 } }` : string >{ x: 3 } : { x: number; } >x : number @@ -377,7 +377,7 @@ var anyVar: any; var a = someGenerics9 `${ 7 }${ anyVar }${ 4 }`; >a : any >someGenerics9 `${ 7 }${ anyVar }${ 4 }` : any ->someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T +>someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T >`${ 7 }${ anyVar }${ 4 }` : string >7 : 7 >anyVar : any @@ -390,7 +390,7 @@ var a: any; var arr = someGenerics9 `${ [] }${ null }${ undefined }`; >arr : any[] >someGenerics9 `${ [] }${ null }${ undefined }` : any[] ->someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T +>someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T >`${ [] }${ null }${ undefined }` : string >[] : undefined[] >null : null @@ -399,4 +399,36 @@ var arr = someGenerics9 `${ [] }${ null }${ undefined }`; var arr: any[]; >arr : any[] +// Generic tag with a generic type for TemplateStringsArray +function someGenerics10(strs: TemplateStringsArray, ...args: U): {parts: T; args: U} { +>someGenerics10 : (strs: TemplateStringsArray, ...args: U) => { parts: T; args: U;} +>strs : TemplateStringsArray +>args : U +>parts : T +>args : U + + return null; +>null : null +} +var a10a = someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }`; +>a10a : { parts: ["part1", "part2", "part3", ""]; args: [string, number, any[]]; } +>someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }` : { parts: ["part1", "part2", "part3", ""]; args: [string, number, any[]]; } +>someGenerics10 : (strs: TemplateStringsArray, ...args: U) => { parts: T; args: U; } +>`part1${ '' }part2${ 0 }part3${ [] }` : string +>'' : "" +>0 : 0 +>[] : undefined[] + +var a10a: {}; +>a10a : { parts: ["part1", "part2", "part3", ""]; args: [string, number, any[]]; } + +var a10b = someGenerics10 `no substitution`; +>a10b : { parts: ["no substitution"]; args: []; } +>someGenerics10 `no substitution` : { parts: ["no substitution"]; args: []; } +>someGenerics10 : (strs: TemplateStringsArray, ...args: U) => { parts: T; args: U; } +>`no substitution` : "no substitution" + +var a10b: {}; +>a10b : { parts: ["no substitution"]; args: []; } + diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.errors.txt b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.errors.txt index a8976788ef8ba..d1a7264a9a763 100644 --- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.errors.txt @@ -1,9 +1,11 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts(62,36): error TS2345: Argument of type '0' is not assignable to parameter of type '""'. tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts(63,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'a9a' must be of type 'string', but here has type '{}'. tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts(76,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'a9e' must be of type '{ x: number; z: Date; y?: undefined; } | { x: number; y: string; z?: undefined; }', but here has type '{}'. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts(96,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'a10a' must be of type '{ parts: ["part1", "part2", "part3", ""]; args: [string, number, any[]]; }', but here has type '{}'. +tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts(99,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'a10b' must be of type '{ parts: ["no substitution"]; args: []; }', but here has type '{}'. -==== tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts (3 errors) ==== +==== tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts (5 errors) ==== // Generic tag with one parameter function noParams(n: T) { } noParams ``; @@ -102,4 +104,20 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference var arr = someGenerics9 `${ [] }${ null }${ undefined }`; var arr: any[]; + // Generic tag with a generic type for TemplateStringsArray + function someGenerics10(strs: TemplateStringsArray, ...args: U): {parts: T; args: U} { + return null; + } + var a10a = someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }`; + var a10a: {}; + ~~~~ +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a10a' must be of type '{ parts: ["part1", "part2", "part3", ""]; args: [string, number, any[]]; }', but here has type '{}'. +!!! related TS6203 tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts:95:5: 'a10a' was also declared here. + + var a10b = someGenerics10 `no substitution`; + var a10b: {}; + ~~~~ +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a10b' must be of type '{ parts: ["no substitution"]; args: []; }', but here has type '{}'. +!!! related TS6203 tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts:98:5: 'a10b' was also declared here. + \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.js b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.js index 379c7b87bcbbb..86b1a18b0c627 100644 --- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.js +++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.js @@ -89,6 +89,16 @@ var a: any; var arr = someGenerics9 `${ [] }${ null }${ undefined }`; var arr: any[]; +// Generic tag with a generic type for TemplateStringsArray +function someGenerics10(strs: TemplateStringsArray, ...args: U): {parts: T; args: U} { + return null; +} +var a10a = someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }`; +var a10a: {}; + +var a10b = someGenerics10 `no substitution`; +var a10b: {}; + //// [taggedTemplateStringsTypeArgumentInferenceES6.js] @@ -155,3 +165,11 @@ var a; // Generic tag with multiple parameters of generic type where one argument is [] and the other is not 'any' var arr = someGenerics9 `${[]}${null}${undefined}`; var arr; +// Generic tag with a generic type for TemplateStringsArray +function someGenerics10(strs, ...args) { + return null; +} +var a10a = someGenerics10 `part1${''}part2${0}part3${[]}`; +var a10a; +var a10b = someGenerics10 `no substitution`; +var a10b; diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.symbols b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.symbols index e24dd09ccfec8..413c8514710d4 100644 --- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.symbols +++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.symbols @@ -342,4 +342,35 @@ var arr = someGenerics9 `${ [] }${ null }${ undefined }`; var arr: any[]; >arr : Symbol(arr, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 87, 3), Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 88, 3)) +// Generic tag with a generic type for TemplateStringsArray +function someGenerics10(strs: TemplateStringsArray, ...args: U): {parts: T; args: U} { +>someGenerics10 : Symbol(someGenerics10, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 88, 15)) +>T : Symbol(T, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 91, 24)) +>U : Symbol(U, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 91, 52)) +>strs : Symbol(strs, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 91, 83)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 91, 24)) +>args : Symbol(args, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 91, 113)) +>U : Symbol(U, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 91, 52)) +>parts : Symbol(parts, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 91, 128)) +>T : Symbol(T, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 91, 24)) +>args : Symbol(args, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 91, 137)) +>U : Symbol(U, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 91, 52)) + + return null; +} +var a10a = someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }`; +>a10a : Symbol(a10a, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 94, 3), Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 95, 3)) +>someGenerics10 : Symbol(someGenerics10, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 88, 15)) + +var a10a: {}; +>a10a : Symbol(a10a, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 94, 3), Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 95, 3)) + +var a10b = someGenerics10 `no substitution`; +>a10b : Symbol(a10b, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 97, 3), Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 98, 3)) +>someGenerics10 : Symbol(someGenerics10, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 88, 15)) + +var a10b: {}; +>a10b : Symbol(a10b, Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 97, 3), Decl(taggedTemplateStringsTypeArgumentInferenceES6.ts, 98, 3)) + diff --git a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.types b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.types index 1953bde609932..2adc35f4a9774 100644 --- a/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.types +++ b/tests/baselines/reference/taggedTemplateStringsTypeArgumentInferenceES6.types @@ -12,11 +12,11 @@ noParams ``; // Generic tag with parameter which does not use type parameter function noGenericParams(n: TemplateStringsArray) { } >noGenericParams : (n: TemplateStringsArray) => void ->n : TemplateStringsArray +>n : TemplateStringsArray noGenericParams ``; >noGenericParams `` : void ->noGenericParams : (n: TemplateStringsArray) => void +>noGenericParams : (n: TemplateStringsArray) => void >`` : "" // Generic tag with multiple type parameters and only one used in parameter type annotation @@ -33,25 +33,25 @@ someGenerics1a `${3}`; function someGenerics1b(n: TemplateStringsArray, m: U) { } >someGenerics1b : (n: TemplateStringsArray, m: U) => void ->n : TemplateStringsArray +>n : TemplateStringsArray >m : U someGenerics1b `${3}`; >someGenerics1b `${3}` : void ->someGenerics1b : (n: TemplateStringsArray, m: U) => void +>someGenerics1b : (n: TemplateStringsArray, m: U) => void >`${3}` : string >3 : 3 // Generic tag with argument of function type whose parameter is of type parameter type function someGenerics2a(strs: TemplateStringsArray, n: (x: T) => void) { } >someGenerics2a : (strs: TemplateStringsArray, n: (x: T) => void) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >n : (x: T) => void >x : T someGenerics2a `${(n: string) => n}`; >someGenerics2a `${(n: string) => n}` : void ->someGenerics2a : (strs: TemplateStringsArray, n: (x: T) => void) => void +>someGenerics2a : (strs: TemplateStringsArray, n: (x: T) => void) => void >`${(n: string) => n}` : string >(n: string) => n : (n: string) => string >n : string @@ -59,14 +59,14 @@ someGenerics2a `${(n: string) => n}`; function someGenerics2b(strs: TemplateStringsArray, n: (x: T, y: U) => void) { } >someGenerics2b : (strs: TemplateStringsArray, n: (x: T, y: U) => void) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >n : (x: T, y: U) => void >x : T >y : U someGenerics2b `${ (n: string, x: number) => n }`; >someGenerics2b `${ (n: string, x: number) => n }` : void ->someGenerics2b : (strs: TemplateStringsArray, n: (x: T, y: U) => void) => void +>someGenerics2b : (strs: TemplateStringsArray, n: (x: T, y: U) => void) => void >`${ (n: string, x: number) => n }` : string >(n: string, x: number) => n : (n: string, x: number) => string >n : string @@ -76,26 +76,26 @@ someGenerics2b `${ (n: string, x: number) => n }`; // Generic tag with argument of function type whose parameter is not of type parameter type but body/return type uses type parameter function someGenerics3(strs: TemplateStringsArray, producer: () => T) { } >someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >producer : () => T someGenerics3 `${() => ''}`; >someGenerics3 `${() => ''}` : void ->someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void +>someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void >`${() => ''}` : string >() => '' : () => string >'' : "" someGenerics3 `${() => undefined}`; >someGenerics3 `${() => undefined}` : void ->someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void +>someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void >`${() => undefined}` : string >() => undefined : () => any >undefined : undefined someGenerics3 `${() => 3}`; >someGenerics3 `${() => 3}` : void ->someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void +>someGenerics3 : (strs: TemplateStringsArray, producer: () => T) => void >`${() => 3}` : string >() => 3 : () => number >3 : 3 @@ -103,14 +103,14 @@ someGenerics3 `${() => 3}`; // 2 parameter generic tag with argument 1 of type parameter type and argument 2 of function type whose parameter is of type parameter type function someGenerics4(strs: TemplateStringsArray, n: T, f: (x: U) => void) { } >someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >n : T >f : (x: U) => void >x : U someGenerics4 `${4}${ () => null }`; >someGenerics4 `${4}${ () => null }` : void ->someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${4}${ () => null }` : string >4 : 4 >() => null : () => any @@ -118,7 +118,7 @@ someGenerics4 `${4}${ () => null }`; someGenerics4 `${''}${ () => 3 }`; >someGenerics4 `${''}${ () => 3 }` : void ->someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${''}${ () => 3 }` : string >'' : "" >() => 3 : () => number @@ -126,7 +126,7 @@ someGenerics4 `${''}${ () => 3 }`; someGenerics4 `${ null }${ null }`; >someGenerics4 `${ null }${ null }` : void ->someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics4 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${ null }${ null }` : string >null : null >null : null @@ -134,14 +134,14 @@ someGenerics4 `${ null }${ null }`; // 2 parameter generic tag with argument 2 of type parameter type and argument 1 of function type whose parameter is of type parameter type function someGenerics5(strs: TemplateStringsArray, n: T, f: (x: U) => void) { } >someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >n : T >f : (x: U) => void >x : U someGenerics5 `${ 4 } ${ () => null }`; >someGenerics5 `${ 4 } ${ () => null }` : void ->someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${ 4 } ${ () => null }` : string >4 : 4 >() => null : () => any @@ -149,7 +149,7 @@ someGenerics5 `${ 4 } ${ () => null }`; someGenerics5 `${ '' }${ () => 3 }`; >someGenerics5 `${ '' }${ () => 3 }` : void ->someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${ '' }${ () => 3 }` : string >'' : "" >() => 3 : () => number @@ -157,7 +157,7 @@ someGenerics5 `${ '' }${ () => 3 }`; someGenerics5 `${null}${null}`; >someGenerics5 `${null}${null}` : void ->someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void +>someGenerics5 : (strs: TemplateStringsArray, n: T, f: (x: U) => void) => void >`${null}${null}` : string >null : null >null : null @@ -165,7 +165,7 @@ someGenerics5 `${null}${null}`; // Generic tag with multiple arguments of function types that each have parameters of the same generic type function someGenerics6(strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) { } >someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >a : (a: A) => A >a : A >b : (b: A) => A @@ -175,7 +175,7 @@ function someGenerics6(strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) someGenerics6 `${ n => n }${ n => n}${ n => n}`; >someGenerics6 `${ n => n }${ n => n}${ n => n}` : void ->someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void +>someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void >`${ n => n }${ n => n}${ n => n}` : string >n => n : (n: unknown) => unknown >n : unknown @@ -189,7 +189,7 @@ someGenerics6 `${ n => n }${ n => n}${ n => n}`; someGenerics6 `${ n => n }${ n => n}${ n => n}`; >someGenerics6 `${ n => n }${ n => n}${ n => n}` : void ->someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void +>someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void >`${ n => n }${ n => n}${ n => n}` : string >n => n : (n: unknown) => unknown >n : unknown @@ -203,7 +203,7 @@ someGenerics6 `${ n => n }${ n => n}${ n => n}`; someGenerics6 `${ (n: number) => n }${ (n: number) => n }${ (n: number) => n }`; >someGenerics6 `${ (n: number) => n }${ (n: number) => n }${ (n: number) => n }` : void ->someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void +>someGenerics6 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: A) => A, c: (c: A) => A) => void >`${ (n: number) => n }${ (n: number) => n }${ (n: number) => n }` : string >(n: number) => n : (n: number) => number >n : number @@ -218,7 +218,7 @@ someGenerics6 `${ (n: number) => n }${ (n: number) => n }${ (n: number) => n }`; // Generic tag with multiple arguments of function types that each have parameters of different generic type function someGenerics7(strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) { } >someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >a : (a: A) => A >a : A >b : (b: B) => B @@ -228,7 +228,7 @@ function someGenerics7(strs: TemplateStringsArray, a: (a: A) => A, b: ( someGenerics7 `${ n => n }${ n => n }${ n => n }`; >someGenerics7 `${ n => n }${ n => n }${ n => n }` : void ->someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void >`${ n => n }${ n => n }${ n => n }` : string >n => n : (n: unknown) => unknown >n : unknown @@ -242,7 +242,7 @@ someGenerics7 `${ n => n }${ n => n }${ n => n }`; someGenerics7 `${ n => n }${ n => n }${ n => n }`; >someGenerics7 `${ n => n }${ n => n }${ n => n }` : void ->someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void >`${ n => n }${ n => n }${ n => n }` : string >n => n : (n: unknown) => unknown >n : unknown @@ -256,7 +256,7 @@ someGenerics7 `${ n => n }${ n => n }${ n => n }`; someGenerics7 `${(n: number) => n}${ (n: string) => n}${ (n: number) => n}`; >someGenerics7 `${(n: number) => n}${ (n: string) => n}${ (n: number) => n}` : void ->someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void >`${(n: number) => n}${ (n: string) => n}${ (n: number) => n}` : string >(n: number) => n : (n: number) => number >n : number @@ -271,20 +271,20 @@ someGenerics7 `${(n: number) => n}${ (n: string) => n}${ (n: number) => n}`; // Generic tag with argument of generic function type function someGenerics8(strs: TemplateStringsArray, n: T): T { return n; } >someGenerics8 : (strs: TemplateStringsArray, n: T) => T ->strs : TemplateStringsArray +>strs : TemplateStringsArray >n : T >n : T var x = someGenerics8 `${ someGenerics7 }`; ->x : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void ->someGenerics8 `${ someGenerics7 }` : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void ->someGenerics8 : (strs: TemplateStringsArray, n: T) => T +>x : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics8 `${ someGenerics7 }` : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics8 : (strs: TemplateStringsArray, n: T) => T >`${ someGenerics7 }` : string ->someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>someGenerics7 : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void x `${null}${null}${null}`; >x `${null}${null}${null}` : void ->x : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void +>x : (strs: TemplateStringsArray, a: (a: A) => A, b: (b: B) => B, c: (c: C) => C) => void >`${null}${null}${null}` : string >null : null >null : null @@ -293,7 +293,7 @@ x `${null}${null}${null}`; // Generic tag with multiple parameters of generic type passed arguments with no best common type function someGenerics9(strs: TemplateStringsArray, a: T, b: T, c: T): T { >someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T ->strs : TemplateStringsArray +>strs : TemplateStringsArray >a : T >b : T >c : T @@ -304,7 +304,7 @@ function someGenerics9(strs: TemplateStringsArray, a: T, b: T, c: T): T { var a9a = someGenerics9 `${ '' }${ 0 }${ [] }`; >a9a : string >someGenerics9 `${ '' }${ 0 }${ [] }` : "" ->someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T +>someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T >`${ '' }${ 0 }${ [] }` : string >'' : "" >0 : 0 @@ -332,7 +332,7 @@ interface A92 { var a9e = someGenerics9 `${ undefined }${ { x: 6, z: new Date() } }${ { x: 6, y: '' } }`; >a9e : { x: number; z: Date; y?: undefined; } | { x: number; y: string; z?: undefined; } >someGenerics9 `${ undefined }${ { x: 6, z: new Date() } }${ { x: 6, y: '' } }` : { x: number; z: Date; y?: undefined; } | { x: number; y: string; z?: undefined; } ->someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T +>someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T >`${ undefined }${ { x: 6, z: new Date() } }${ { x: 6, y: '' } }` : string >undefined : undefined >{ x: 6, z: new Date() } : { x: number; z: Date; } @@ -354,7 +354,7 @@ var a9e: {}; var a9d = someGenerics9 `${ { x: 3 }}${ { x: 6 }}${ { x: 6 } }`; >a9d : { x: number; } >someGenerics9 `${ { x: 3 }}${ { x: 6 }}${ { x: 6 } }` : { x: number; } ->someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T +>someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T >`${ { x: 3 }}${ { x: 6 }}${ { x: 6 } }` : string >{ x: 3 } : { x: number; } >x : number @@ -377,7 +377,7 @@ var anyVar: any; var a = someGenerics9 `${ 7 }${ anyVar }${ 4 }`; >a : any >someGenerics9 `${ 7 }${ anyVar }${ 4 }` : any ->someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T +>someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T >`${ 7 }${ anyVar }${ 4 }` : string >7 : 7 >anyVar : any @@ -390,7 +390,7 @@ var a: any; var arr = someGenerics9 `${ [] }${ null }${ undefined }`; >arr : any[] >someGenerics9 `${ [] }${ null }${ undefined }` : any[] ->someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T +>someGenerics9 : (strs: TemplateStringsArray, a: T, b: T, c: T) => T >`${ [] }${ null }${ undefined }` : string >[] : undefined[] >null : null @@ -399,4 +399,36 @@ var arr = someGenerics9 `${ [] }${ null }${ undefined }`; var arr: any[]; >arr : any[] +// Generic tag with a generic type for TemplateStringsArray +function someGenerics10(strs: TemplateStringsArray, ...args: U): {parts: T; args: U} { +>someGenerics10 : (strs: TemplateStringsArray, ...args: U) => { parts: T; args: U;} +>strs : TemplateStringsArray +>args : U +>parts : T +>args : U + + return null; +>null : null +} +var a10a = someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }`; +>a10a : { parts: ["part1", "part2", "part3", ""]; args: [string, number, any[]]; } +>someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }` : { parts: ["part1", "part2", "part3", ""]; args: [string, number, any[]]; } +>someGenerics10 : (strs: TemplateStringsArray, ...args: U) => { parts: T; args: U; } +>`part1${ '' }part2${ 0 }part3${ [] }` : string +>'' : "" +>0 : 0 +>[] : undefined[] + +var a10a: {}; +>a10a : { parts: ["part1", "part2", "part3", ""]; args: [string, number, any[]]; } + +var a10b = someGenerics10 `no substitution`; +>a10b : { parts: ["no substitution"]; args: []; } +>someGenerics10 `no substitution` : { parts: ["no substitution"]; args: []; } +>someGenerics10 : (strs: TemplateStringsArray, ...args: U) => { parts: T; args: U; } +>`no substitution` : "no substitution" + +var a10b: {}; +>a10b : { parts: ["no substitution"]; args: []; } + diff --git a/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.errors.txt new file mode 100644 index 0000000000000..e98f2864d4fac --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.errors.txt @@ -0,0 +1,40 @@ +tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringParts.ts(26,21): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'never'. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringParts.ts(28,20): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + + +==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringParts.ts (2 errors) ==== + type DataTypes = 'string'|'number'|'boolean'; + + interface DataTypesToTypeScriptType { + string: string; + number: number; + boolean: boolean; + } + + type ArgsFor = + TParts extends [infer THead, ...infer TTail] + ? THead extends DataTypes + ? [DataTypesToTypeScriptType[THead], ...ArgsFor] + : [never, ...ArgsFor] + : [] + + declare function dataTypes>( + parts: TemplateStringsArray, + ...args: TArgs): unknown; + + dataTypes `string${'abc'}`; + + dataTypes `number${5}`; + + dataTypes `boolean${true}`; + + dataTypes `unknown${[]}`; + ~~ +!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'never'. + + dataTypes `string${3}`; + ~ +!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + + dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; + \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.js b/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.js new file mode 100644 index 0000000000000..8a28fe293a295 --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.js @@ -0,0 +1,44 @@ +//// [taggedTemplateStringsWithGenericStringParts.ts] +type DataTypes = 'string'|'number'|'boolean'; + +interface DataTypesToTypeScriptType { + string: string; + number: number; + boolean: boolean; +} + +type ArgsFor = + TParts extends [infer THead, ...infer TTail] + ? THead extends DataTypes + ? [DataTypesToTypeScriptType[THead], ...ArgsFor] + : [never, ...ArgsFor] + : [] + +declare function dataTypes>( + parts: TemplateStringsArray, + ...args: TArgs): unknown; + +dataTypes `string${'abc'}`; + +dataTypes `number${5}`; + +dataTypes `boolean${true}`; + +dataTypes `unknown${[]}`; + +dataTypes `string${3}`; + +dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; + + +//// [taggedTemplateStringsWithGenericStringParts.js] +var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; +}; +dataTypes(__makeTemplateObject(["string", ""], ["string", ""]), 'abc'); +dataTypes(__makeTemplateObject(["number", ""], ["number", ""]), 5); +dataTypes(__makeTemplateObject(["boolean", ""], ["boolean", ""]), true); +dataTypes(__makeTemplateObject(["unknown", ""], ["unknown", ""]), []); +dataTypes(__makeTemplateObject(["string", ""], ["string", ""]), 3); +dataTypes(__makeTemplateObject(["string", "string", "number", "boolean", ""], ["string", "string", "number", "boolean", ""]), 'abc', 'def', 10, false); diff --git a/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.symbols b/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.symbols new file mode 100644 index 0000000000000..f2ca79f491083 --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.symbols @@ -0,0 +1,76 @@ +=== tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringParts.ts === +type DataTypes = 'string'|'number'|'boolean'; +>DataTypes : Symbol(DataTypes, Decl(taggedTemplateStringsWithGenericStringParts.ts, 0, 0)) + +interface DataTypesToTypeScriptType { +>DataTypesToTypeScriptType : Symbol(DataTypesToTypeScriptType, Decl(taggedTemplateStringsWithGenericStringParts.ts, 0, 45)) + + string: string; +>string : Symbol(DataTypesToTypeScriptType.string, Decl(taggedTemplateStringsWithGenericStringParts.ts, 2, 37)) + + number: number; +>number : Symbol(DataTypesToTypeScriptType.number, Decl(taggedTemplateStringsWithGenericStringParts.ts, 3, 17)) + + boolean: boolean; +>boolean : Symbol(DataTypesToTypeScriptType.boolean, Decl(taggedTemplateStringsWithGenericStringParts.ts, 4, 17)) +} + +type ArgsFor = +>ArgsFor : Symbol(ArgsFor, Decl(taggedTemplateStringsWithGenericStringParts.ts, 6, 1)) +>TParts : Symbol(TParts, Decl(taggedTemplateStringsWithGenericStringParts.ts, 8, 13)) + + TParts extends [infer THead, ...infer TTail] +>TParts : Symbol(TParts, Decl(taggedTemplateStringsWithGenericStringParts.ts, 8, 13)) +>THead : Symbol(THead, Decl(taggedTemplateStringsWithGenericStringParts.ts, 9, 25)) +>TTail : Symbol(TTail, Decl(taggedTemplateStringsWithGenericStringParts.ts, 9, 41)) + + ? THead extends DataTypes +>THead : Symbol(THead, Decl(taggedTemplateStringsWithGenericStringParts.ts, 9, 25)) +>DataTypes : Symbol(DataTypes, Decl(taggedTemplateStringsWithGenericStringParts.ts, 0, 0)) + + ? [DataTypesToTypeScriptType[THead], ...ArgsFor] +>DataTypesToTypeScriptType : Symbol(DataTypesToTypeScriptType, Decl(taggedTemplateStringsWithGenericStringParts.ts, 0, 45)) +>THead : Symbol(THead, Decl(taggedTemplateStringsWithGenericStringParts.ts, 9, 25)) +>ArgsFor : Symbol(ArgsFor, Decl(taggedTemplateStringsWithGenericStringParts.ts, 6, 1)) +>TTail : Symbol(TTail, Decl(taggedTemplateStringsWithGenericStringParts.ts, 9, 41)) + + : [never, ...ArgsFor] +>ArgsFor : Symbol(ArgsFor, Decl(taggedTemplateStringsWithGenericStringParts.ts, 6, 1)) +>TTail : Symbol(TTail, Decl(taggedTemplateStringsWithGenericStringParts.ts, 9, 41)) + + : [] + +declare function dataTypes>( +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringParts.ts, 13, 12)) +>TParts : Symbol(TParts, Decl(taggedTemplateStringsWithGenericStringParts.ts, 15, 27)) +>TArgs : Symbol(TArgs, Decl(taggedTemplateStringsWithGenericStringParts.ts, 15, 60)) +>ArgsFor : Symbol(ArgsFor, Decl(taggedTemplateStringsWithGenericStringParts.ts, 6, 1)) +>TParts : Symbol(TParts, Decl(taggedTemplateStringsWithGenericStringParts.ts, 15, 27)) + + parts: TemplateStringsArray, +>parts : Symbol(parts, Decl(taggedTemplateStringsWithGenericStringParts.ts, 15, 92)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --)) +>TParts : Symbol(TParts, Decl(taggedTemplateStringsWithGenericStringParts.ts, 15, 27)) + + ...args: TArgs): unknown; +>args : Symbol(args, Decl(taggedTemplateStringsWithGenericStringParts.ts, 16, 56)) +>TArgs : Symbol(TArgs, Decl(taggedTemplateStringsWithGenericStringParts.ts, 15, 60)) + +dataTypes `string${'abc'}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringParts.ts, 13, 12)) + +dataTypes `number${5}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringParts.ts, 13, 12)) + +dataTypes `boolean${true}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringParts.ts, 13, 12)) + +dataTypes `unknown${[]}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringParts.ts, 13, 12)) + +dataTypes `string${3}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringParts.ts, 13, 12)) + +dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringParts.ts, 13, 12)) + diff --git a/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.types b/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.types new file mode 100644 index 0000000000000..84cb97218dad2 --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithGenericStringParts.types @@ -0,0 +1,72 @@ +=== tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringParts.ts === +type DataTypes = 'string'|'number'|'boolean'; +>DataTypes : DataTypes + +interface DataTypesToTypeScriptType { + string: string; +>string : string + + number: number; +>number : number + + boolean: boolean; +>boolean : boolean +} + +type ArgsFor = +>ArgsFor : ArgsFor + + TParts extends [infer THead, ...infer TTail] + ? THead extends DataTypes + ? [DataTypesToTypeScriptType[THead], ...ArgsFor] + : [never, ...ArgsFor] + : [] + +declare function dataTypes>( +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown + + parts: TemplateStringsArray, +>parts : TemplateStringsArray + + ...args: TArgs): unknown; +>args : TArgs + +dataTypes `string${'abc'}`; +>dataTypes `string${'abc'}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`string${'abc'}` : string +>'abc' : "abc" + +dataTypes `number${5}`; +>dataTypes `number${5}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`number${5}` : string +>5 : 5 + +dataTypes `boolean${true}`; +>dataTypes `boolean${true}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`boolean${true}` : string +>true : true + +dataTypes `unknown${[]}`; +>dataTypes `unknown${[]}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`unknown${[]}` : string +>[] : undefined[] + +dataTypes `string${3}`; +>dataTypes `string${3}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`string${3}` : string +>3 : 3 + +dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; +>dataTypes `string${'abc'}string${'def'}number${10}boolean${false}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`string${'abc'}string${'def'}number${10}boolean${false}` : string +>'abc' : "abc" +>'def' : "def" +>10 : 10 +>false : false + diff --git a/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.errors.txt new file mode 100644 index 0000000000000..08a45737df735 --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.errors.txt @@ -0,0 +1,40 @@ +tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringPartsES6.ts(26,21): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'never'. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringPartsES6.ts(28,20): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + + +==== tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringPartsES6.ts (2 errors) ==== + type DataTypes = 'string'|'number'|'boolean'; + + interface DataTypesToTypeScriptType { + string: string; + number: number; + boolean: boolean; + } + + type ArgsFor = + TParts extends [infer THead, ...infer TTail] + ? THead extends DataTypes + ? [DataTypesToTypeScriptType[THead], ...ArgsFor] + : [never, ...ArgsFor] + : [] + + declare function dataTypes>( + parts: TemplateStringsArray, + ...args: TArgs): unknown; + + dataTypes `string${'abc'}`; + + dataTypes `number${5}`; + + dataTypes `boolean${true}`; + + dataTypes `unknown${[]}`; + ~~ +!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'never'. + + dataTypes `string${3}`; + ~ +!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + + dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; + \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.js b/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.js new file mode 100644 index 0000000000000..8232a23fd293a --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.js @@ -0,0 +1,40 @@ +//// [taggedTemplateStringsWithGenericStringPartsES6.ts] +type DataTypes = 'string'|'number'|'boolean'; + +interface DataTypesToTypeScriptType { + string: string; + number: number; + boolean: boolean; +} + +type ArgsFor = + TParts extends [infer THead, ...infer TTail] + ? THead extends DataTypes + ? [DataTypesToTypeScriptType[THead], ...ArgsFor] + : [never, ...ArgsFor] + : [] + +declare function dataTypes>( + parts: TemplateStringsArray, + ...args: TArgs): unknown; + +dataTypes `string${'abc'}`; + +dataTypes `number${5}`; + +dataTypes `boolean${true}`; + +dataTypes `unknown${[]}`; + +dataTypes `string${3}`; + +dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; + + +//// [taggedTemplateStringsWithGenericStringPartsES6.js] +dataTypes `string${'abc'}`; +dataTypes `number${5}`; +dataTypes `boolean${true}`; +dataTypes `unknown${[]}`; +dataTypes `string${3}`; +dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; diff --git a/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.symbols b/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.symbols new file mode 100644 index 0000000000000..35a9f72988202 --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.symbols @@ -0,0 +1,76 @@ +=== tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringPartsES6.ts === +type DataTypes = 'string'|'number'|'boolean'; +>DataTypes : Symbol(DataTypes, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 0, 0)) + +interface DataTypesToTypeScriptType { +>DataTypesToTypeScriptType : Symbol(DataTypesToTypeScriptType, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 0, 45)) + + string: string; +>string : Symbol(DataTypesToTypeScriptType.string, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 2, 37)) + + number: number; +>number : Symbol(DataTypesToTypeScriptType.number, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 3, 17)) + + boolean: boolean; +>boolean : Symbol(DataTypesToTypeScriptType.boolean, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 4, 17)) +} + +type ArgsFor = +>ArgsFor : Symbol(ArgsFor, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 6, 1)) +>TParts : Symbol(TParts, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 8, 13)) + + TParts extends [infer THead, ...infer TTail] +>TParts : Symbol(TParts, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 8, 13)) +>THead : Symbol(THead, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 9, 25)) +>TTail : Symbol(TTail, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 9, 41)) + + ? THead extends DataTypes +>THead : Symbol(THead, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 9, 25)) +>DataTypes : Symbol(DataTypes, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 0, 0)) + + ? [DataTypesToTypeScriptType[THead], ...ArgsFor] +>DataTypesToTypeScriptType : Symbol(DataTypesToTypeScriptType, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 0, 45)) +>THead : Symbol(THead, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 9, 25)) +>ArgsFor : Symbol(ArgsFor, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 6, 1)) +>TTail : Symbol(TTail, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 9, 41)) + + : [never, ...ArgsFor] +>ArgsFor : Symbol(ArgsFor, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 6, 1)) +>TTail : Symbol(TTail, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 9, 41)) + + : [] + +declare function dataTypes>( +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 13, 12)) +>TParts : Symbol(TParts, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 15, 27)) +>TArgs : Symbol(TArgs, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 15, 60)) +>ArgsFor : Symbol(ArgsFor, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 6, 1)) +>TParts : Symbol(TParts, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 15, 27)) + + parts: TemplateStringsArray, +>parts : Symbol(parts, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 15, 92)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --)) +>TParts : Symbol(TParts, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 15, 27)) + + ...args: TArgs): unknown; +>args : Symbol(args, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 16, 56)) +>TArgs : Symbol(TArgs, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 15, 60)) + +dataTypes `string${'abc'}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 13, 12)) + +dataTypes `number${5}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 13, 12)) + +dataTypes `boolean${true}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 13, 12)) + +dataTypes `unknown${[]}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 13, 12)) + +dataTypes `string${3}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 13, 12)) + +dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; +>dataTypes : Symbol(dataTypes, Decl(taggedTemplateStringsWithGenericStringPartsES6.ts, 13, 12)) + diff --git a/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.types b/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.types new file mode 100644 index 0000000000000..ebbe99b031d6a --- /dev/null +++ b/tests/baselines/reference/taggedTemplateStringsWithGenericStringPartsES6.types @@ -0,0 +1,72 @@ +=== tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringPartsES6.ts === +type DataTypes = 'string'|'number'|'boolean'; +>DataTypes : DataTypes + +interface DataTypesToTypeScriptType { + string: string; +>string : string + + number: number; +>number : number + + boolean: boolean; +>boolean : boolean +} + +type ArgsFor = +>ArgsFor : ArgsFor + + TParts extends [infer THead, ...infer TTail] + ? THead extends DataTypes + ? [DataTypesToTypeScriptType[THead], ...ArgsFor] + : [never, ...ArgsFor] + : [] + +declare function dataTypes>( +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown + + parts: TemplateStringsArray, +>parts : TemplateStringsArray + + ...args: TArgs): unknown; +>args : TArgs + +dataTypes `string${'abc'}`; +>dataTypes `string${'abc'}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`string${'abc'}` : string +>'abc' : "abc" + +dataTypes `number${5}`; +>dataTypes `number${5}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`number${5}` : string +>5 : 5 + +dataTypes `boolean${true}`; +>dataTypes `boolean${true}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`boolean${true}` : string +>true : true + +dataTypes `unknown${[]}`; +>dataTypes `unknown${[]}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`unknown${[]}` : string +>[] : undefined[] + +dataTypes `string${3}`; +>dataTypes `string${3}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`string${3}` : string +>3 : 3 + +dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; +>dataTypes `string${'abc'}string${'def'}number${10}boolean${false}` : unknown +>dataTypes : >(parts: TemplateStringsArray, ...args: TArgs) => unknown +>`string${'abc'}string${'def'}number${10}boolean${false}` : string +>'abc' : "abc" +>'def' : "def" +>10 : 10 +>false : false + diff --git a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.types b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.types index 1e0acac274aec..65c8d67f083fb 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.types +++ b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTags.types @@ -1,7 +1,7 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTags.ts === interface I { (stringParts: TemplateStringsArray, ...rest: boolean[]): I; ->stringParts : TemplateStringsArray +>stringParts : TemplateStringsArray >rest : boolean[] g: I; diff --git a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTagsES6.types b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTagsES6.types index 39993e1367b6f..6a2bdfcf8ebd1 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTagsES6.types +++ b/tests/baselines/reference/taggedTemplateStringsWithIncompatibleTypedTagsES6.types @@ -1,7 +1,7 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithIncompatibleTypedTagsES6.ts === interface I { (stringParts: TemplateStringsArray, ...rest: boolean[]): I; ->stringParts : TemplateStringsArray +>stringParts : TemplateStringsArray >rest : boolean[] g: I; diff --git a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.types b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.types index 7049ed1cbb746..85ddea1fb311c 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.types +++ b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressions.types @@ -1,7 +1,7 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithManyCallAndMemberExpressions.ts === interface I { (strs: TemplateStringsArray, ...subs: number[]): I; ->strs : TemplateStringsArray +>strs : TemplateStringsArray >subs : number[] member: { diff --git a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressionsES6.types b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressionsES6.types index 365e824c76b08..4cb3c99834883 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressionsES6.types +++ b/tests/baselines/reference/taggedTemplateStringsWithManyCallAndMemberExpressionsES6.types @@ -1,7 +1,7 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithManyCallAndMemberExpressionsES6.ts === interface I { (strs: TemplateStringsArray, ...subs: number[]): I; ->strs : TemplateStringsArray +>strs : TemplateStringsArray >subs : number[] member: { diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.errors.txt index df28829239178..5f5a8d1245d70 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.errors.txt @@ -1,26 +1,33 @@ -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(9,13): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. - Property 'raw' is missing in type 'undefined[]' but required in type 'TemplateStringsArray'. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(10,13): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(9,13): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Property 'raw' is missing in type 'undefined[]' but required in type '{ readonly raw: readonly string[]; }'. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(10,13): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(11,13): error TS2769: No overload matches this call. - Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. - Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. + Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(12,13): error TS2769: No overload matches this call. - Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. - Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. + Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(13,13): error TS2769: No overload matches this call. - Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. - Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. + Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(14,23): error TS2554: Expected 1-3 arguments, but got 4. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(19,20): error TS2769: No overload matches this call. - Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. + Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'number'. - Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. + Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'string'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts(21,24): error TS2554: Expected 1-3 arguments, but got 4. @@ -36,37 +43,44 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio var a = foo([]); // number ~~ -!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2345: Property 'raw' is missing in type 'undefined[]' but required in type 'TemplateStringsArray'. -!!! related TS2728 /.ts/lib.es5.d.ts:605:14: 'raw' is declared here. +!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2345: Property 'raw' is missing in type 'undefined[]' but required in type '{ readonly raw: readonly string[]; }'. +!!! related TS2728 /.ts/lib.es5.d.ts:607:24: 'raw' is declared here. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var b = foo([], 1); // string ~~ -!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2345: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var c = foo([], 1, 2); // boolean ~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. +!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var d = foo([], 1, true); // boolean (with error) ~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. +!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var e = foo([], 1, "2"); // {} ~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. +!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var f = foo([], 1, 2, 3); // any (with error) ~ @@ -78,9 +92,9 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio var x = foo `${1}${true}`; // boolean (with error) ~~~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. +!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'number'. -!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. +!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'string'. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var y = foo `${1}${"2"}`; // {} diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.types b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.types index e809c1c274578..4b76ebef0024d 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.types +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1.types @@ -1,27 +1,27 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1.ts === function foo(strs: TemplateStringsArray): number; ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } ->strs : TemplateStringsArray +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>strs : TemplateStringsArray function foo(strs: TemplateStringsArray, x: number): string; ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } ->strs : TemplateStringsArray +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>strs : TemplateStringsArray >x : number function foo(strs: TemplateStringsArray, x: number, y: number): boolean; ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } ->strs : TemplateStringsArray +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>strs : TemplateStringsArray >x : number >y : number function foo(strs: TemplateStringsArray, x: number, y: string): {}; ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } ->strs : TemplateStringsArray +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>strs : TemplateStringsArray >x : number >y : string function foo(...stuff: any[]): any { ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >stuff : any[] return undefined; @@ -31,20 +31,20 @@ function foo(...stuff: any[]): any { var a = foo([]); // number >a : never >foo([]) : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] var b = foo([], 1); // string >b : never >foo([], 1) : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] >1 : 1 var c = foo([], 1, 2); // boolean >c : never >foo([], 1, 2) : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] >1 : 1 >2 : 2 @@ -52,7 +52,7 @@ var c = foo([], 1, 2); // boolean var d = foo([], 1, true); // boolean (with error) >d : never >foo([], 1, true) : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] >1 : 1 >true : true @@ -60,7 +60,7 @@ var d = foo([], 1, true); // boolean (with error) var e = foo([], 1, "2"); // {} >e : never >foo([], 1, "2") : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] >1 : 1 >"2" : "2" @@ -68,7 +68,7 @@ var e = foo([], 1, "2"); // {} var f = foo([], 1, 2, 3); // any (with error) >f : never >foo([], 1, 2, 3) : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] >1 : 1 >2 : 2 @@ -77,20 +77,20 @@ var f = foo([], 1, 2, 3); // any (with error) var u = foo ``; // number >u : number >foo `` : number ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`` : "" var v = foo `${1}`; // string >v : string >foo `${1}` : string ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`${1}` : string >1 : 1 var w = foo `${1}${2}`; // boolean >w : boolean >foo `${1}${2}` : boolean ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`${1}${2}` : string >1 : 1 >2 : 2 @@ -98,7 +98,7 @@ var w = foo `${1}${2}`; // boolean var x = foo `${1}${true}`; // boolean (with error) >x : never >foo `${1}${true}` : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`${1}${true}` : string >1 : 1 >true : true @@ -106,7 +106,7 @@ var x = foo `${1}${true}`; // boolean (with error) var y = foo `${1}${"2"}`; // {} >y : {} >foo `${1}${"2"}` : {} ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`${1}${"2"}` : string >1 : 1 >"2" : "2" @@ -114,7 +114,7 @@ var y = foo `${1}${"2"}`; // {} var z = foo `${1}${2}${3}`; // any (with error) >z : never >foo `${1}${2}${3}` : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`${1}${2}${3}` : string >1 : 1 >2 : 2 diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1_ES6.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1_ES6.errors.txt index c6bb16548b693..71a0a35046355 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1_ES6.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1_ES6.errors.txt @@ -1,26 +1,33 @@ -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts(9,13): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. - Property 'raw' is missing in type 'undefined[]' but required in type 'TemplateStringsArray'. -tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts(10,13): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts(9,13): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Property 'raw' is missing in type 'undefined[]' but required in type '{ readonly raw: readonly string[]; }'. +tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts(10,13): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts(11,13): error TS2769: No overload matches this call. - Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. - Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. + Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts(12,13): error TS2769: No overload matches this call. - Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. - Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. + Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts(13,13): error TS2769: No overload matches this call. - Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. - Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. - Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. + Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. + Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. + Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts(14,23): error TS2554: Expected 1-3 arguments, but got 4. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts(19,20): error TS2769: No overload matches this call. - Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. + Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'number'. - Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. + Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'string'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts(21,24): error TS2554: Expected 1-3 arguments, but got 4. @@ -36,37 +43,44 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio var a = foo([]); // number ~~ -!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2345: Property 'raw' is missing in type 'undefined[]' but required in type 'TemplateStringsArray'. -!!! related TS2728 /.ts/lib.es5.d.ts:605:14: 'raw' is declared here. +!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2345: Property 'raw' is missing in type 'undefined[]' but required in type '{ readonly raw: readonly string[]; }'. +!!! related TS2728 /.ts/lib.es5.d.ts:607:24: 'raw' is declared here. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var b = foo([], 1); // string ~~ -!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2345: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var c = foo([], 1, 2); // boolean ~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. +!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var d = foo([], 1, true); // boolean (with error) ~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. +!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var e = foo([], 1, "2"); // {} ~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. -!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. +!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. +!!! error TS2769: Argument of type 'undefined[]' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2769: Type 'undefined[]' is not assignable to type '{ readonly raw: readonly string[]; }'. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var f = foo([], 1, 2, 3); // any (with error) ~ @@ -78,9 +92,9 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio var x = foo `${1}${true}`; // boolean (with error) ~~~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. +!!! error TS2769: Overload 1 of 4, '(strs: TemplateStringsArray, x: number, y: number): boolean', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'number'. -!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. +!!! error TS2769: Overload 2 of 4, '(strs: TemplateStringsArray, x: number, y: string): {}', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'string'. !!! related TS2793 tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts:5:10: The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible. var y = foo `${1}${"2"}`; // {} diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1_ES6.types b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1_ES6.types index d9cb80eb05c80..1ab7aaa50ac2d 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1_ES6.types +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution1_ES6.types @@ -1,27 +1,27 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution1_ES6.ts === function foo(strs: TemplateStringsArray): number; ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } ->strs : TemplateStringsArray +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>strs : TemplateStringsArray function foo(strs: TemplateStringsArray, x: number): string; ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } ->strs : TemplateStringsArray +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>strs : TemplateStringsArray >x : number function foo(strs: TemplateStringsArray, x: number, y: number): boolean; ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } ->strs : TemplateStringsArray +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>strs : TemplateStringsArray >x : number >y : number function foo(strs: TemplateStringsArray, x: number, y: string): {}; ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } ->strs : TemplateStringsArray +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>strs : TemplateStringsArray >x : number >y : string function foo(...stuff: any[]): any { ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >stuff : any[] return undefined; @@ -31,20 +31,20 @@ function foo(...stuff: any[]): any { var a = foo([]); // number >a : never >foo([]) : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] var b = foo([], 1); // string >b : never >foo([], 1) : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] >1 : 1 var c = foo([], 1, 2); // boolean >c : never >foo([], 1, 2) : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] >1 : 1 >2 : 2 @@ -52,7 +52,7 @@ var c = foo([], 1, 2); // boolean var d = foo([], 1, true); // boolean (with error) >d : never >foo([], 1, true) : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] >1 : 1 >true : true @@ -60,7 +60,7 @@ var d = foo([], 1, true); // boolean (with error) var e = foo([], 1, "2"); // {} >e : never >foo([], 1, "2") : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] >1 : 1 >"2" : "2" @@ -68,7 +68,7 @@ var e = foo([], 1, "2"); // {} var f = foo([], 1, 2, 3); // any (with error) >f : never >foo([], 1, 2, 3) : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >[] : undefined[] >1 : 1 >2 : 2 @@ -77,20 +77,20 @@ var f = foo([], 1, 2, 3); // any (with error) var u = foo ``; // number >u : number >foo `` : number ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`` : "" var v = foo `${1}`; // string >v : string >foo `${1}` : string ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`${1}` : string >1 : 1 var w = foo `${1}${2}`; // boolean >w : boolean >foo `${1}${2}` : boolean ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`${1}${2}` : string >1 : 1 >2 : 2 @@ -98,7 +98,7 @@ var w = foo `${1}${2}`; // boolean var x = foo `${1}${true}`; // boolean (with error) >x : never >foo `${1}${true}` : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`${1}${true}` : string >1 : 1 >true : true @@ -106,7 +106,7 @@ var x = foo `${1}${true}`; // boolean (with error) var y = foo `${1}${"2"}`; // {} >y : {} >foo `${1}${"2"}` : {} ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`${1}${"2"}` : string >1 : 1 >"2" : "2" @@ -114,7 +114,7 @@ var y = foo `${1}${"2"}`; // {} var z = foo `${1}${2}${3}`; // any (with error) >z : never >foo `${1}${2}${3}` : never ->foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } +>foo : { (strs: TemplateStringsArray): number; (strs: TemplateStringsArray, x: number): string; (strs: TemplateStringsArray, x: number, y: number): boolean; (strs: TemplateStringsArray, x: number, y: string): {}; } >`${1}${2}${3}` : string >1 : 1 >2 : 2 diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.types b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.types index d9bac7879d94d..8a2980d850d81 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.types +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2.types @@ -1,16 +1,16 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution2.ts === function foo1(strs: TemplateStringsArray, x: number): string; >foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } ->strs : TemplateStringsArray +>strs : TemplateStringsArray >x : number function foo1(strs: string[], x: number): number; ->foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } +>foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } >strs : string[] >x : number function foo1(...stuff: any[]): any { ->foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } +>foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } >stuff : any[] return undefined; @@ -20,29 +20,29 @@ function foo1(...stuff: any[]): any { var a = foo1 `${1}`; >a : string >foo1 `${1}` : string ->foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } +>foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } >`${1}` : string >1 : 1 var b = foo1([], 1); >b : number >foo1([], 1) : number ->foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } +>foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } >[] : undefined[] >1 : 1 function foo2(strs: string[], x: number): number; ->foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } +>foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } >strs : string[] >x : number function foo2(strs: TemplateStringsArray, x: number): string; >foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } ->strs : TemplateStringsArray +>strs : TemplateStringsArray >x : number function foo2(...stuff: any[]): any { ->foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } +>foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } >stuff : any[] return undefined; @@ -50,16 +50,16 @@ function foo2(...stuff: any[]): any { } var c = foo2 `${1}`; ->c : string ->foo2 `${1}` : string ->foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } +>c : number +>foo2 `${1}` : number +>foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } >`${1}` : string >1 : 1 var d = foo2([], 1); >d : number >foo2([], 1) : number ->foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } +>foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } >[] : undefined[] >1 : 1 diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2_ES6.types b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2_ES6.types index 68180a23d8f5f..0ff704554d17c 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2_ES6.types +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution2_ES6.types @@ -1,16 +1,16 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution2_ES6.ts === function foo1(strs: TemplateStringsArray, x: number): string; >foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } ->strs : TemplateStringsArray +>strs : TemplateStringsArray >x : number function foo1(strs: string[], x: number): number; ->foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } +>foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } >strs : string[] >x : number function foo1(...stuff: any[]): any { ->foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } +>foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } >stuff : any[] return undefined; @@ -20,29 +20,29 @@ function foo1(...stuff: any[]): any { var a = foo1 `${1}`; >a : string >foo1 `${1}` : string ->foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } +>foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } >`${1}` : string >1 : 1 var b = foo1([], 1); >b : number >foo1([], 1) : number ->foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } +>foo1 : { (strs: TemplateStringsArray, x: number): string; (strs: string[], x: number): number; } >[] : undefined[] >1 : 1 function foo2(strs: string[], x: number): number; ->foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } +>foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } >strs : string[] >x : number function foo2(strs: TemplateStringsArray, x: number): string; >foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } ->strs : TemplateStringsArray +>strs : TemplateStringsArray >x : number function foo2(...stuff: any[]): any { ->foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } +>foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } >stuff : any[] return undefined; @@ -50,16 +50,16 @@ function foo2(...stuff: any[]): any { } var c = foo2 `${1}`; ->c : string ->foo2 `${1}` : string ->foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } +>c : number +>foo2 `${1}` : number +>foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } >`${1}` : string >1 : 1 var d = foo2([], 1); >d : number >foo2([], 1) : number ->foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } +>foo2 : { (strs: string[], x: number): number; (strs: TemplateStringsArray, x: number): string; } >[] : undefined[] >1 : 1 diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.errors.txt index 02076e2f86d3d..ef541d0535913 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.errors.txt @@ -1,19 +1,19 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(9,9): error TS2769: No overload matches this call. - Overload 1 of 2, '(strs: TemplateStringsArray, s: string): string', gave the following error. + Overload 1 of 2, '(strs: TemplateStringsArray, s: string): string', gave the following error. Argument of type '{}' is not assignable to parameter of type 'string'. - Overload 2 of 2, '(strs: TemplateStringsArray, n: number): number', gave the following error. + Overload 2 of 2, '(strs: TemplateStringsArray, n: number): number', gave the following error. Argument of type '{}' is not assignable to parameter of type 'number'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(18,4): error TS2339: Property 'foo' does not exist on type 'Date'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(44,1): error TS2554: Expected 2-4 arguments, but got 1. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(62,9): error TS2769: No overload matches this call. - Overload 1 of 3, '(strs: TemplateStringsArray, n: string, m: any): any', gave the following error. + Overload 1 of 3, '(strs: TemplateStringsArray, n: string, m: any): any', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'string'. - Overload 2 of 3, '(strs: TemplateStringsArray, n: number, m: any): any', gave the following error. + Overload 2 of 3, '(strs: TemplateStringsArray, n: number, m: any): any', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'number'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(63,18): error TS2769: No overload matches this call. - Overload 1 of 3, '(strs: TemplateStringsArray, n: any, m: number): any', gave the following error. + Overload 1 of 3, '(strs: TemplateStringsArray, n: any, m: number): any', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'number'. - Overload 2 of 3, '(strs: TemplateStringsArray, n: any, m: string): any', gave the following error. + Overload 2 of 3, '(strs: TemplateStringsArray, n: any, m: string): any', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'string'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts(69,18): error TS2339: Property 'toFixed' does not exist on type 'string'. @@ -30,9 +30,9 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio fn1 `${ {} }`; // Error ~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 2, '(strs: TemplateStringsArray, s: string): string', gave the following error. +!!! error TS2769: Overload 1 of 2, '(strs: TemplateStringsArray, s: string): string', gave the following error. !!! error TS2769: Argument of type '{}' is not assignable to parameter of type 'string'. -!!! error TS2769: Overload 2 of 2, '(strs: TemplateStringsArray, n: number): number', gave the following error. +!!! error TS2769: Overload 2 of 2, '(strs: TemplateStringsArray, n: number): number', gave the following error. !!! error TS2769: Argument of type '{}' is not assignable to parameter of type 'number'. function fn2(strs: TemplateStringsArray, s: string, n: number): number; @@ -94,16 +94,16 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio fn4 `${ true }${ null }`; ~~~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 3, '(strs: TemplateStringsArray, n: string, m: any): any', gave the following error. +!!! error TS2769: Overload 1 of 3, '(strs: TemplateStringsArray, n: string, m: any): any', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'string'. -!!! error TS2769: Overload 2 of 3, '(strs: TemplateStringsArray, n: number, m: any): any', gave the following error. +!!! error TS2769: Overload 2 of 3, '(strs: TemplateStringsArray, n: number, m: any): any', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'number'. fn4 `${ null }${ true }`; ~~~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 3, '(strs: TemplateStringsArray, n: any, m: number): any', gave the following error. +!!! error TS2769: Overload 1 of 3, '(strs: TemplateStringsArray, n: any, m: number): any', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'number'. -!!! error TS2769: Overload 2 of 3, '(strs: TemplateStringsArray, n: any, m: string): any', gave the following error. +!!! error TS2769: Overload 2 of 3, '(strs: TemplateStringsArray, n: any, m: string): any', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'string'. // Non - generic overloads where contextual typing of function arguments has errors diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.types b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.types index 138b2a162da61..305cfc61d81bc 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.types +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3.types @@ -1,53 +1,53 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3.ts === // Ambiguous call picks the first overload in declaration order function fn1(strs: TemplateStringsArray, s: string): string; ->fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } ->strs : TemplateStringsArray +>fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } +>strs : TemplateStringsArray >s : string function fn1(strs: TemplateStringsArray, n: number): number; ->fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } ->strs : TemplateStringsArray +>fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } +>strs : TemplateStringsArray >n : number function fn1() { return null; } ->fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } +>fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } >null : null var s: string = fn1 `${ undefined }`; >s : string >fn1 `${ undefined }` : string ->fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } +>fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } >`${ undefined }` : string >undefined : undefined // No candidate overloads found fn1 `${ {} }`; // Error >fn1 `${ {} }` : never ->fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } +>fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } >`${ {} }` : string >{} : {} function fn2(strs: TemplateStringsArray, s: string, n: number): number; ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } ->strs : TemplateStringsArray +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>strs : TemplateStringsArray >s : string >n : number function fn2(strs: TemplateStringsArray, n: number, t: T): T; ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } ->strs : TemplateStringsArray +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>strs : TemplateStringsArray >n : number >t : T function fn2() { return undefined; } ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } >undefined : undefined var d1: Date = fn2 `${ 0 }${ undefined }`; // contextually typed >d1 : Date >fn2 `${ 0 }${ undefined }` : any ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } >`${ 0 }${ undefined }` : string >0 : 0 >undefined : undefined @@ -55,7 +55,7 @@ var d1: Date = fn2 `${ 0 }${ undefined }`; // contextually typed var d2 = fn2 `${ 0 }${ undefined }`; // any >d2 : any >fn2 `${ 0 }${ undefined }` : any ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } >`${ 0 }${ undefined }` : string >0 : 0 >undefined : undefined @@ -73,7 +73,7 @@ d2(); // no error (typed as any) // Generic and non-generic overload where generic overload is the only candidate fn2 `${ 0 }${ '' }`; // OK >fn2 `${ 0 }${ '' }` : "" ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } >`${ 0 }${ '' }` : string >0 : 0 >'' : "" @@ -81,46 +81,46 @@ fn2 `${ 0 }${ '' }`; // OK // Generic and non-generic overload where non-generic overload is the only candidate fn2 `${ '' }${ 0 }`; // OK >fn2 `${ '' }${ 0 }` : number ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } >`${ '' }${ 0 }` : string >'' : "" >0 : 0 // Generic overloads with differing arity function fn3(strs: TemplateStringsArray, n: T): string; ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } ->strs : TemplateStringsArray +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>strs : TemplateStringsArray >n : T function fn3(strs: TemplateStringsArray, s: string, t: T, u: U): U; ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } ->strs : TemplateStringsArray +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>strs : TemplateStringsArray >s : string >t : T >u : U function fn3(strs: TemplateStringsArray, v: V, u: U, t: T): number; ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } ->strs : TemplateStringsArray +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>strs : TemplateStringsArray >v : V >u : U >t : T function fn3() { return null; } ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >null : null var s = fn3 `${ 3 }`; >s : string >fn3 `${ 3 }` : string ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${ 3 }` : string >3 : 3 var s = fn3 `${'' }${ 3 }${ '' }`; >s : string >fn3 `${'' }${ 3 }${ '' }` : "" ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${'' }${ 3 }${ '' }` : string >'' : "" >3 : 3 @@ -129,7 +129,7 @@ var s = fn3 `${'' }${ 3 }${ '' }`; var n = fn3 `${ 5 }${ 5 }${ 5 }`; >n : number >fn3 `${ 5 }${ 5 }${ 5 }` : number ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${ 5 }${ 5 }${ 5 }` : string >5 : 5 >5 : 5 @@ -142,14 +142,14 @@ var n: number; var s = fn3 `${ 4 }` >s : string >fn3 `${ 4 }` : string ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${ 4 }` : string >4 : 4 var s = fn3 `${ '' }${ '' }${ '' }`; >s : string >fn3 `${ '' }${ '' }${ '' }` : "" ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${ '' }${ '' }${ '' }` : string >'' : "" >'' : "" @@ -158,7 +158,7 @@ var s = fn3 `${ '' }${ '' }${ '' }`; var n = fn3 `${ '' }${ '' }${ 3 }`; >n : number >fn3 `${ '' }${ '' }${ 3 }` : 3 ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${ '' }${ '' }${ 3 }` : string >'' : "" >'' : "" @@ -167,54 +167,54 @@ var n = fn3 `${ '' }${ '' }${ 3 }`; // Generic overloads with differing arity tagging with argument count that doesn't match any overload fn3 ``; // Error >fn3 `` : string ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`` : "" // Generic overloads with constraints function fn4(strs: TemplateStringsArray, n: T, m: U); ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } ->strs : TemplateStringsArray +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>strs : TemplateStringsArray >n : T >m : U function fn4(strs: TemplateStringsArray, n: T, m: U); ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } ->strs : TemplateStringsArray +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>strs : TemplateStringsArray >n : T >m : U function fn4(strs: TemplateStringsArray) ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } ->strs : TemplateStringsArray +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>strs : TemplateStringsArray function fn4() { } ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } // Generic overloads with constraints tagged with types that satisfy the constraints fn4 `${ '' }${ 3 }`; >fn4 `${ '' }${ 3 }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ '' }${ 3 }` : string >'' : "" >3 : 3 fn4 `${ 3 }${ '' }`; >fn4 `${ 3 }${ '' }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ 3 }${ '' }` : string >3 : 3 >'' : "" fn4 `${ 3 }${ undefined }`; >fn4 `${ 3 }${ undefined }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ 3 }${ undefined }` : string >3 : 3 >undefined : undefined fn4 `${ '' }${ null }`; >fn4 `${ '' }${ null }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ '' }${ null }` : string >'' : "" >null : null @@ -222,7 +222,7 @@ fn4 `${ '' }${ null }`; // Generic overloads with constraints called with type arguments that do not satisfy the constraints fn4 `${ null }${ null }`; // Error >fn4 `${ null }${ null }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ null }${ null }` : string >null : null >null : null @@ -230,38 +230,38 @@ fn4 `${ null }${ null }`; // Error // Generic overloads with constraints called without type arguments but with types that do not satisfy the constraints fn4 `${ true }${ null }`; >fn4 `${ true }${ null }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ true }${ null }` : string >true : true >null : null fn4 `${ null }${ true }`; >fn4 `${ null }${ true }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ null }${ true }` : string >null : null >true : true // Non - generic overloads where contextual typing of function arguments has errors function fn5(strs: TemplateStringsArray, f: (n: string) => void): string; ->fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } ->strs : TemplateStringsArray +>fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } +>strs : TemplateStringsArray >f : (n: string) => void >n : string function fn5(strs: TemplateStringsArray, f: (n: number) => void): number; ->fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } ->strs : TemplateStringsArray +>fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } +>strs : TemplateStringsArray >f : (n: number) => void >n : number function fn5() { return undefined; } ->fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } +>fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } >undefined : undefined fn5 `${ (n) => n.toFixed() }`; // will error; 'n' should have type 'string'. >fn5 `${ (n) => n.toFixed() }` : string ->fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } +>fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } >`${ (n) => n.toFixed() }` : string >(n) => n.toFixed() : (n: string) => any >n : string @@ -272,7 +272,7 @@ fn5 `${ (n) => n.toFixed() }`; // will error; 'n' should have type 'string'. fn5 `${ (n) => n.substr(0) }`; >fn5 `${ (n) => n.substr(0) }` : string ->fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } +>fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } >`${ (n) => n.substr(0) }` : string >(n) => n.substr(0) : (n: string) => string >n : string diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3_ES6.errors.txt b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3_ES6.errors.txt index 2ae0c9f6f7552..95c7482e430cc 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3_ES6.errors.txt +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3_ES6.errors.txt @@ -1,19 +1,19 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3_ES6.ts(9,9): error TS2769: No overload matches this call. - Overload 1 of 2, '(strs: TemplateStringsArray, s: string): string', gave the following error. + Overload 1 of 2, '(strs: TemplateStringsArray, s: string): string', gave the following error. Argument of type '{}' is not assignable to parameter of type 'string'. - Overload 2 of 2, '(strs: TemplateStringsArray, n: number): number', gave the following error. + Overload 2 of 2, '(strs: TemplateStringsArray, n: number): number', gave the following error. Argument of type '{}' is not assignable to parameter of type 'number'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3_ES6.ts(18,4): error TS2339: Property 'foo' does not exist on type 'Date'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3_ES6.ts(44,1): error TS2554: Expected 2-4 arguments, but got 1. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3_ES6.ts(62,9): error TS2769: No overload matches this call. - Overload 1 of 3, '(strs: TemplateStringsArray, n: string, m: any): any', gave the following error. + Overload 1 of 3, '(strs: TemplateStringsArray, n: string, m: any): any', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'string'. - Overload 2 of 3, '(strs: TemplateStringsArray, n: number, m: any): any', gave the following error. + Overload 2 of 3, '(strs: TemplateStringsArray, n: number, m: any): any', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'number'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3_ES6.ts(63,18): error TS2769: No overload matches this call. - Overload 1 of 3, '(strs: TemplateStringsArray, n: any, m: number): any', gave the following error. + Overload 1 of 3, '(strs: TemplateStringsArray, n: any, m: number): any', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'number'. - Overload 2 of 3, '(strs: TemplateStringsArray, n: any, m: string): any', gave the following error. + Overload 2 of 3, '(strs: TemplateStringsArray, n: any, m: string): any', gave the following error. Argument of type 'boolean' is not assignable to parameter of type 'string'. tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3_ES6.ts(69,18): error TS2551: Property 'toFixed' does not exist on type 'string'. Did you mean 'fixed'? @@ -30,9 +30,9 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio fn1 `${ {} }`; // Error ~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 2, '(strs: TemplateStringsArray, s: string): string', gave the following error. +!!! error TS2769: Overload 1 of 2, '(strs: TemplateStringsArray, s: string): string', gave the following error. !!! error TS2769: Argument of type '{}' is not assignable to parameter of type 'string'. -!!! error TS2769: Overload 2 of 2, '(strs: TemplateStringsArray, n: number): number', gave the following error. +!!! error TS2769: Overload 2 of 2, '(strs: TemplateStringsArray, n: number): number', gave the following error. !!! error TS2769: Argument of type '{}' is not assignable to parameter of type 'number'. function fn2(strs: TemplateStringsArray, s: string, n: number): number; @@ -94,16 +94,16 @@ tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolutio fn4 `${ true }${ null }`; ~~~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 3, '(strs: TemplateStringsArray, n: string, m: any): any', gave the following error. +!!! error TS2769: Overload 1 of 3, '(strs: TemplateStringsArray, n: string, m: any): any', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'string'. -!!! error TS2769: Overload 2 of 3, '(strs: TemplateStringsArray, n: number, m: any): any', gave the following error. +!!! error TS2769: Overload 2 of 3, '(strs: TemplateStringsArray, n: number, m: any): any', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'number'. fn4 `${ null }${ true }`; ~~~~ !!! error TS2769: No overload matches this call. -!!! error TS2769: Overload 1 of 3, '(strs: TemplateStringsArray, n: any, m: number): any', gave the following error. +!!! error TS2769: Overload 1 of 3, '(strs: TemplateStringsArray, n: any, m: number): any', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'number'. -!!! error TS2769: Overload 2 of 3, '(strs: TemplateStringsArray, n: any, m: string): any', gave the following error. +!!! error TS2769: Overload 2 of 3, '(strs: TemplateStringsArray, n: any, m: string): any', gave the following error. !!! error TS2769: Argument of type 'boolean' is not assignable to parameter of type 'string'. // Non - generic overloads where contextual typing of function arguments has errors diff --git a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3_ES6.types b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3_ES6.types index 57d82e034ae04..8108bd3d0802c 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3_ES6.types +++ b/tests/baselines/reference/taggedTemplateStringsWithOverloadResolution3_ES6.types @@ -1,53 +1,53 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithOverloadResolution3_ES6.ts === // Ambiguous call picks the first overload in declaration order function fn1(strs: TemplateStringsArray, s: string): string; ->fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } ->strs : TemplateStringsArray +>fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } +>strs : TemplateStringsArray >s : string function fn1(strs: TemplateStringsArray, n: number): number; ->fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } ->strs : TemplateStringsArray +>fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } +>strs : TemplateStringsArray >n : number function fn1() { return null; } ->fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } +>fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } >null : null var s: string = fn1 `${ undefined }`; >s : string >fn1 `${ undefined }` : string ->fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } +>fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } >`${ undefined }` : string >undefined : undefined // No candidate overloads found fn1 `${ {} }`; // Error >fn1 `${ {} }` : never ->fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } +>fn1 : { (strs: TemplateStringsArray, s: string): string; (strs: TemplateStringsArray, n: number): number; } >`${ {} }` : string >{} : {} function fn2(strs: TemplateStringsArray, s: string, n: number): number; ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } ->strs : TemplateStringsArray +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>strs : TemplateStringsArray >s : string >n : number function fn2(strs: TemplateStringsArray, n: number, t: T): T; ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } ->strs : TemplateStringsArray +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>strs : TemplateStringsArray >n : number >t : T function fn2() { return undefined; } ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } >undefined : undefined var d1: Date = fn2 `${ 0 }${ undefined }`; // contextually typed >d1 : Date >fn2 `${ 0 }${ undefined }` : any ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } >`${ 0 }${ undefined }` : string >0 : 0 >undefined : undefined @@ -55,7 +55,7 @@ var d1: Date = fn2 `${ 0 }${ undefined }`; // contextually typed var d2 = fn2 `${ 0 }${ undefined }`; // any >d2 : any >fn2 `${ 0 }${ undefined }` : any ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } >`${ 0 }${ undefined }` : string >0 : 0 >undefined : undefined @@ -73,7 +73,7 @@ d2(); // no error (typed as any) // Generic and non-generic overload where generic overload is the only candidate fn2 `${ 0 }${ '' }`; // OK >fn2 `${ 0 }${ '' }` : "" ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } >`${ 0 }${ '' }` : string >0 : 0 >'' : "" @@ -81,46 +81,46 @@ fn2 `${ 0 }${ '' }`; // OK // Generic and non-generic overload where non-generic overload is the only candidate fn2 `${ '' }${ 0 }`; // OK >fn2 `${ '' }${ 0 }` : number ->fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } +>fn2 : { (strs: TemplateStringsArray, s: string, n: number): number; (strs: TemplateStringsArray, n: number, t: T): T; } >`${ '' }${ 0 }` : string >'' : "" >0 : 0 // Generic overloads with differing arity function fn3(strs: TemplateStringsArray, n: T): string; ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } ->strs : TemplateStringsArray +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>strs : TemplateStringsArray >n : T function fn3(strs: TemplateStringsArray, s: string, t: T, u: U): U; ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } ->strs : TemplateStringsArray +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>strs : TemplateStringsArray >s : string >t : T >u : U function fn3(strs: TemplateStringsArray, v: V, u: U, t: T): number; ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } ->strs : TemplateStringsArray +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>strs : TemplateStringsArray >v : V >u : U >t : T function fn3() { return null; } ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >null : null var s = fn3 `${ 3 }`; >s : string >fn3 `${ 3 }` : string ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${ 3 }` : string >3 : 3 var s = fn3 `${'' }${ 3 }${ '' }`; >s : string >fn3 `${'' }${ 3 }${ '' }` : "" ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${'' }${ 3 }${ '' }` : string >'' : "" >3 : 3 @@ -129,7 +129,7 @@ var s = fn3 `${'' }${ 3 }${ '' }`; var n = fn3 `${ 5 }${ 5 }${ 5 }`; >n : number >fn3 `${ 5 }${ 5 }${ 5 }` : number ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${ 5 }${ 5 }${ 5 }` : string >5 : 5 >5 : 5 @@ -142,14 +142,14 @@ var n: number; var s = fn3 `${ 4 }` >s : string >fn3 `${ 4 }` : string ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${ 4 }` : string >4 : 4 var s = fn3 `${ '' }${ '' }${ '' }`; >s : string >fn3 `${ '' }${ '' }${ '' }` : "" ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${ '' }${ '' }${ '' }` : string >'' : "" >'' : "" @@ -158,7 +158,7 @@ var s = fn3 `${ '' }${ '' }${ '' }`; var n = fn3 `${ '' }${ '' }${ 3 }`; >n : number >fn3 `${ '' }${ '' }${ 3 }` : 3 ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`${ '' }${ '' }${ 3 }` : string >'' : "" >'' : "" @@ -167,54 +167,54 @@ var n = fn3 `${ '' }${ '' }${ 3 }`; // Generic overloads with differing arity tagging with argument count that doesn't match any overload fn3 ``; // Error >fn3 `` : string ->fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } +>fn3 : { (strs: TemplateStringsArray, n: T): string; (strs: TemplateStringsArray, s: string, t: T, u: U): U; (strs: TemplateStringsArray, v: V, u: U, t: T): number; } >`` : "" // Generic overloads with constraints function fn4(strs: TemplateStringsArray, n: T, m: U); ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } ->strs : TemplateStringsArray +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>strs : TemplateStringsArray >n : T >m : U function fn4(strs: TemplateStringsArray, n: T, m: U); ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } ->strs : TemplateStringsArray +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>strs : TemplateStringsArray >n : T >m : U function fn4(strs: TemplateStringsArray) ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } ->strs : TemplateStringsArray +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>strs : TemplateStringsArray function fn4() { } ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } // Generic overloads with constraints tagged with types that satisfy the constraints fn4 `${ '' }${ 3 }`; >fn4 `${ '' }${ 3 }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ '' }${ 3 }` : string >'' : "" >3 : 3 fn4 `${ 3 }${ '' }`; >fn4 `${ 3 }${ '' }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ 3 }${ '' }` : string >3 : 3 >'' : "" fn4 `${ 3 }${ undefined }`; >fn4 `${ 3 }${ undefined }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ 3 }${ undefined }` : string >3 : 3 >undefined : undefined fn4 `${ '' }${ null }`; >fn4 `${ '' }${ null }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ '' }${ null }` : string >'' : "" >null : null @@ -222,7 +222,7 @@ fn4 `${ '' }${ null }`; // Generic overloads with constraints called with type arguments that do not satisfy the constraints fn4 `${ null }${ null }`; // Error >fn4 `${ null }${ null }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ null }${ null }` : string >null : null >null : null @@ -230,38 +230,38 @@ fn4 `${ null }${ null }`; // Error // Generic overloads with constraints called without type arguments but with types that do not satisfy the constraints fn4 `${ true }${ null }`; >fn4 `${ true }${ null }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ true }${ null }` : string >true : true >null : null fn4 `${ null }${ true }`; >fn4 `${ null }${ true }` : any ->fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } +>fn4 : { (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray, n: T, m: U): any; (strs: TemplateStringsArray): any; } >`${ null }${ true }` : string >null : null >true : true // Non - generic overloads where contextual typing of function arguments has errors function fn5(strs: TemplateStringsArray, f: (n: string) => void): string; ->fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } ->strs : TemplateStringsArray +>fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } +>strs : TemplateStringsArray >f : (n: string) => void >n : string function fn5(strs: TemplateStringsArray, f: (n: number) => void): number; ->fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } ->strs : TemplateStringsArray +>fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } +>strs : TemplateStringsArray >f : (n: number) => void >n : number function fn5() { return undefined; } ->fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } +>fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } >undefined : undefined fn5 `${ (n) => n.toFixed() }`; // will error; 'n' should have type 'string'. >fn5 `${ (n) => n.toFixed() }` : string ->fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } +>fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } >`${ (n) => n.toFixed() }` : string >(n) => n.toFixed() : (n: string) => any >n : string @@ -272,7 +272,7 @@ fn5 `${ (n) => n.toFixed() }`; // will error; 'n' should have type 'string'. fn5 `${ (n) => n.substr(0) }`; >fn5 `${ (n) => n.substr(0) }` : string ->fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } +>fn5 : { (strs: TemplateStringsArray, f: (n: string) => void): string; (strs: TemplateStringsArray, f: (n: number) => void): number; } >`${ (n) => n.substr(0) }` : string >(n) => n.substr(0) : (n: string) => string >n : string diff --git a/tests/baselines/reference/taggedTemplateStringsWithTypedTags.types b/tests/baselines/reference/taggedTemplateStringsWithTypedTags.types index 2f8b5df162bbf..6f97f12824d7b 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithTypedTags.types +++ b/tests/baselines/reference/taggedTemplateStringsWithTypedTags.types @@ -1,7 +1,7 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTags.ts === interface I { (stringParts: TemplateStringsArray, ...rest: number[]): I; ->stringParts : TemplateStringsArray +>stringParts : TemplateStringsArray >rest : number[] g: I; diff --git a/tests/baselines/reference/taggedTemplateStringsWithTypedTagsES6.types b/tests/baselines/reference/taggedTemplateStringsWithTypedTagsES6.types index 313a338baf6e9..6e3ce63f2cb65 100644 --- a/tests/baselines/reference/taggedTemplateStringsWithTypedTagsES6.types +++ b/tests/baselines/reference/taggedTemplateStringsWithTypedTagsES6.types @@ -1,7 +1,7 @@ === tests/cases/conformance/es6/templates/taggedTemplateStringsWithTypedTagsES6.ts === interface I { (stringParts: TemplateStringsArray, ...rest: number[]): I; ->stringParts : TemplateStringsArray +>stringParts : TemplateStringsArray >rest : number[] g: I; diff --git a/tests/baselines/reference/taggedTemplateWithoutDeclaredHelper.types b/tests/baselines/reference/taggedTemplateWithoutDeclaredHelper.types index aef2556181a15..aa0455388c1f7 100644 --- a/tests/baselines/reference/taggedTemplateWithoutDeclaredHelper.types +++ b/tests/baselines/reference/taggedTemplateWithoutDeclaredHelper.types @@ -8,8 +8,8 @@ function id(x: T) { } export const result = id `hello world`; ->result : TemplateStringsArray ->id `hello world` : TemplateStringsArray +>result : TemplateStringsArray<["hello world"], ["hello world"]> +>id `hello world` : TemplateStringsArray<["hello world"], ["hello world"]> >id : (x: T) => T >`hello world` : "hello world" diff --git a/tests/baselines/reference/taggedTemplatesInDifferentScopes.types b/tests/baselines/reference/taggedTemplatesInDifferentScopes.types index a2ded6150a222..2e92b9fed18e4 100644 --- a/tests/baselines/reference/taggedTemplatesInDifferentScopes.types +++ b/tests/baselines/reference/taggedTemplatesInDifferentScopes.types @@ -1,12 +1,12 @@ === tests/cases/compiler/taggedTemplatesInDifferentScopes.ts === export function tag(parts: TemplateStringsArray, ...values: any[]) { >tag : (parts: TemplateStringsArray, ...values: any[]) => string ->parts : TemplateStringsArray +>parts : TemplateStringsArray >values : any[] return parts[0]; >parts[0] : string ->parts : TemplateStringsArray +>parts : TemplateStringsArray >0 : 0 } function foo() { @@ -14,12 +14,12 @@ function foo() { tag `foo`; >tag `foo` : string ->tag : (parts: TemplateStringsArray, ...values: any[]) => string +>tag : (parts: TemplateStringsArray, ...values: any[]) => string >`foo` : "foo" tag `foo2`; >tag `foo2` : string ->tag : (parts: TemplateStringsArray, ...values: any[]) => string +>tag : (parts: TemplateStringsArray, ...values: any[]) => string >`foo2` : "foo2" } @@ -28,12 +28,12 @@ function bar() { tag `bar`; >tag `bar` : string ->tag : (parts: TemplateStringsArray, ...values: any[]) => string +>tag : (parts: TemplateStringsArray, ...values: any[]) => string >`bar` : "bar" tag `bar2`; >tag `bar2` : string ->tag : (parts: TemplateStringsArray, ...values: any[]) => string +>tag : (parts: TemplateStringsArray, ...values: any[]) => string >`bar2` : "bar2" } diff --git a/tests/baselines/reference/taggedTemplatesInModuleAndGlobal.types b/tests/baselines/reference/taggedTemplatesInModuleAndGlobal.types index e08b5f3afa876..983d3dd890299 100644 --- a/tests/baselines/reference/taggedTemplatesInModuleAndGlobal.types +++ b/tests/baselines/reference/taggedTemplatesInModuleAndGlobal.types @@ -11,20 +11,20 @@ namespace n { } function templateObjectFactory() { ->templateObjectFactory : () => TemplateStringsArray +>templateObjectFactory : () => TemplateStringsArray<["hello world"], ["hello world"]> return id`hello world`; ->id`hello world` : TemplateStringsArray +>id`hello world` : TemplateStringsArray<["hello world"], ["hello world"]> >id : (x: T) => T >`hello world` : "hello world" } let result = templateObjectFactory() === templateObjectFactory(); >result : boolean >templateObjectFactory() === templateObjectFactory() : boolean ->templateObjectFactory() : TemplateStringsArray ->templateObjectFactory : () => TemplateStringsArray ->templateObjectFactory() : TemplateStringsArray ->templateObjectFactory : () => TemplateStringsArray +>templateObjectFactory() : TemplateStringsArray<["hello world"], ["hello world"]> +>templateObjectFactory : () => TemplateStringsArray<["hello world"], ["hello world"]> +>templateObjectFactory() : TemplateStringsArray<["hello world"], ["hello world"]> +>templateObjectFactory : () => TemplateStringsArray<["hello world"], ["hello world"]> } === tests/cases/compiler/module.ts === export { } @@ -37,18 +37,18 @@ function id(x: T): T { } function templateObjectFactory() { ->templateObjectFactory : () => TemplateStringsArray +>templateObjectFactory : () => TemplateStringsArray<["hello world"], ["hello world"]> return id`hello world`; ->id`hello world` : TemplateStringsArray +>id`hello world` : TemplateStringsArray<["hello world"], ["hello world"]> >id : (x: T) => T >`hello world` : "hello world" } let result = templateObjectFactory() === templateObjectFactory(); >result : boolean >templateObjectFactory() === templateObjectFactory() : boolean ->templateObjectFactory() : TemplateStringsArray ->templateObjectFactory : () => TemplateStringsArray ->templateObjectFactory() : TemplateStringsArray ->templateObjectFactory : () => TemplateStringsArray +>templateObjectFactory() : TemplateStringsArray<["hello world"], ["hello world"]> +>templateObjectFactory : () => TemplateStringsArray<["hello world"], ["hello world"]> +>templateObjectFactory() : TemplateStringsArray<["hello world"], ["hello world"]> +>templateObjectFactory : () => TemplateStringsArray<["hello world"], ["hello world"]> diff --git a/tests/baselines/reference/taggedTemplatesRawPartsInference.errors.txt b/tests/baselines/reference/taggedTemplatesRawPartsInference.errors.txt new file mode 100644 index 0000000000000..95463b86c17af --- /dev/null +++ b/tests/baselines/reference/taggedTemplatesRawPartsInference.errors.txt @@ -0,0 +1,14 @@ +tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInference.ts(6,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'a' must be of type '{ parts: ["part1", "part2"]; raw: ["part\\1", "part\\2"]; args: [string]; }', but here has type '{}'. + + +==== tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInference.ts (1 errors) ==== + function tag(strs: TemplateStringsArray, ...args: U): {parts: TParts; raw: TRaw; args: U} { + return null; + } + + var a = tag `part\1${''}part\2`; + var a: {}; + ~ +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a' must be of type '{ parts: ["part1", "part2"]; raw: ["part\\1", "part\\2"]; args: [string]; }', but here has type '{}'. +!!! related TS6203 tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInference.ts:5:5: 'a' was also declared here. + \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplatesRawPartsInference.js b/tests/baselines/reference/taggedTemplatesRawPartsInference.js new file mode 100644 index 0000000000000..6c013a57ff045 --- /dev/null +++ b/tests/baselines/reference/taggedTemplatesRawPartsInference.js @@ -0,0 +1,23 @@ +//// [taggedTemplatesRawPartsInference.ts] +function tag(strs: TemplateStringsArray, ...args: U): {parts: TParts; raw: TRaw; args: U} { + return null; +} + +var a = tag `part\1${''}part\2`; +var a: {}; + + +//// [taggedTemplatesRawPartsInference.js] +var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; +}; +function tag(strs) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return null; +} +var a = tag(__makeTemplateObject(["part1", "part2"], ["part\\1", "part\\2"]), ''); +var a; diff --git a/tests/baselines/reference/taggedTemplatesRawPartsInference.symbols b/tests/baselines/reference/taggedTemplatesRawPartsInference.symbols new file mode 100644 index 0000000000000..f759bbac30971 --- /dev/null +++ b/tests/baselines/reference/taggedTemplatesRawPartsInference.symbols @@ -0,0 +1,29 @@ +=== tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInference.ts === +function tag(strs: TemplateStringsArray, ...args: U): {parts: TParts; raw: TRaw; args: U} { +>tag : Symbol(tag, Decl(taggedTemplatesRawPartsInference.ts, 0, 0)) +>TParts : Symbol(TParts, Decl(taggedTemplatesRawPartsInference.ts, 0, 13)) +>TRaw : Symbol(TRaw, Decl(taggedTemplatesRawPartsInference.ts, 0, 46)) +>U : Symbol(U, Decl(taggedTemplatesRawPartsInference.ts, 0, 78)) +>strs : Symbol(strs, Decl(taggedTemplatesRawPartsInference.ts, 0, 109)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --)) +>TParts : Symbol(TParts, Decl(taggedTemplatesRawPartsInference.ts, 0, 13)) +>TRaw : Symbol(TRaw, Decl(taggedTemplatesRawPartsInference.ts, 0, 46)) +>args : Symbol(args, Decl(taggedTemplatesRawPartsInference.ts, 0, 150)) +>U : Symbol(U, Decl(taggedTemplatesRawPartsInference.ts, 0, 78)) +>parts : Symbol(parts, Decl(taggedTemplatesRawPartsInference.ts, 0, 165)) +>TParts : Symbol(TParts, Decl(taggedTemplatesRawPartsInference.ts, 0, 13)) +>raw : Symbol(raw, Decl(taggedTemplatesRawPartsInference.ts, 0, 179)) +>TRaw : Symbol(TRaw, Decl(taggedTemplatesRawPartsInference.ts, 0, 46)) +>args : Symbol(args, Decl(taggedTemplatesRawPartsInference.ts, 0, 190)) +>U : Symbol(U, Decl(taggedTemplatesRawPartsInference.ts, 0, 78)) + + return null; +} + +var a = tag `part\1${''}part\2`; +>a : Symbol(a, Decl(taggedTemplatesRawPartsInference.ts, 4, 3), Decl(taggedTemplatesRawPartsInference.ts, 5, 3)) +>tag : Symbol(tag, Decl(taggedTemplatesRawPartsInference.ts, 0, 0)) + +var a: {}; +>a : Symbol(a, Decl(taggedTemplatesRawPartsInference.ts, 4, 3), Decl(taggedTemplatesRawPartsInference.ts, 5, 3)) + diff --git a/tests/baselines/reference/taggedTemplatesRawPartsInference.types b/tests/baselines/reference/taggedTemplatesRawPartsInference.types new file mode 100644 index 0000000000000..7d027267d18e4 --- /dev/null +++ b/tests/baselines/reference/taggedTemplatesRawPartsInference.types @@ -0,0 +1,23 @@ +=== tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInference.ts === +function tag(strs: TemplateStringsArray, ...args: U): {parts: TParts; raw: TRaw; args: U} { +>tag : (strs: TemplateStringsArray, ...args: U) => { parts: TParts; raw: TRaw; args: U;} +>strs : TemplateStringsArray +>args : U +>parts : TParts +>raw : TRaw +>args : U + + return null; +>null : null +} + +var a = tag `part\1${''}part\2`; +>a : { parts: ["part1", "part2"]; raw: ["part\\1", "part\\2"]; args: [string]; } +>tag `part\1${''}part\2` : { parts: ["part1", "part2"]; raw: ["part\\1", "part\\2"]; args: [string]; } +>tag : (strs: TemplateStringsArray, ...args: U) => { parts: TParts; raw: TRaw; args: U; } +>`part\1${''}part\2` : string +>'' : "" + +var a: {}; +>a : { parts: ["part1", "part2"]; raw: ["part\\1", "part\\2"]; args: [string]; } + diff --git a/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.errors.txt b/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.errors.txt new file mode 100644 index 0000000000000..88ea2fab66fcf --- /dev/null +++ b/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.errors.txt @@ -0,0 +1,14 @@ +tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInferenceES6.ts(6,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'a' must be of type '{ parts: ["part1", "part2"]; raw: ["part\\1", "part\\2"]; args: [string]; }', but here has type '{}'. + + +==== tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInferenceES6.ts (1 errors) ==== + function tag(strs: TemplateStringsArray, ...args: U): {parts: TParts; raw: TRaw; args: U} { + return null; + } + + var a = tag `part\1${''}part\2`; + var a: {}; + ~ +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'a' must be of type '{ parts: ["part1", "part2"]; raw: ["part\\1", "part\\2"]; args: [string]; }', but here has type '{}'. +!!! related TS6203 tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInferenceES6.ts:5:5: 'a' was also declared here. + \ No newline at end of file diff --git a/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.js b/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.js new file mode 100644 index 0000000000000..a06bc994543d1 --- /dev/null +++ b/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.js @@ -0,0 +1,15 @@ +//// [taggedTemplatesRawPartsInferenceES6.ts] +function tag(strs: TemplateStringsArray, ...args: U): {parts: TParts; raw: TRaw; args: U} { + return null; +} + +var a = tag `part\1${''}part\2`; +var a: {}; + + +//// [taggedTemplatesRawPartsInferenceES6.js] +function tag(strs, ...args) { + return null; +} +var a = tag `part\1${''}part\2`; +var a; diff --git a/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.symbols b/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.symbols new file mode 100644 index 0000000000000..fe3a0f8918b80 --- /dev/null +++ b/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.symbols @@ -0,0 +1,29 @@ +=== tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInferenceES6.ts === +function tag(strs: TemplateStringsArray, ...args: U): {parts: TParts; raw: TRaw; args: U} { +>tag : Symbol(tag, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 0)) +>TParts : Symbol(TParts, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 13)) +>TRaw : Symbol(TRaw, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 46)) +>U : Symbol(U, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 78)) +>strs : Symbol(strs, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 109)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --)) +>TParts : Symbol(TParts, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 13)) +>TRaw : Symbol(TRaw, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 46)) +>args : Symbol(args, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 150)) +>U : Symbol(U, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 78)) +>parts : Symbol(parts, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 165)) +>TParts : Symbol(TParts, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 13)) +>raw : Symbol(raw, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 179)) +>TRaw : Symbol(TRaw, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 46)) +>args : Symbol(args, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 190)) +>U : Symbol(U, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 78)) + + return null; +} + +var a = tag `part\1${''}part\2`; +>a : Symbol(a, Decl(taggedTemplatesRawPartsInferenceES6.ts, 4, 3), Decl(taggedTemplatesRawPartsInferenceES6.ts, 5, 3)) +>tag : Symbol(tag, Decl(taggedTemplatesRawPartsInferenceES6.ts, 0, 0)) + +var a: {}; +>a : Symbol(a, Decl(taggedTemplatesRawPartsInferenceES6.ts, 4, 3), Decl(taggedTemplatesRawPartsInferenceES6.ts, 5, 3)) + diff --git a/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.types b/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.types new file mode 100644 index 0000000000000..035fdf41777e6 --- /dev/null +++ b/tests/baselines/reference/taggedTemplatesRawPartsInferenceES6.types @@ -0,0 +1,23 @@ +=== tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInferenceES6.ts === +function tag(strs: TemplateStringsArray, ...args: U): {parts: TParts; raw: TRaw; args: U} { +>tag : (strs: TemplateStringsArray, ...args: U) => { parts: TParts; raw: TRaw; args: U;} +>strs : TemplateStringsArray +>args : U +>parts : TParts +>raw : TRaw +>args : U + + return null; +>null : null +} + +var a = tag `part\1${''}part\2`; +>a : { parts: ["part1", "part2"]; raw: ["part\\1", "part\\2"]; args: [string]; } +>tag `part\1${''}part\2` : { parts: ["part1", "part2"]; raw: ["part\\1", "part\\2"]; args: [string]; } +>tag : (strs: TemplateStringsArray, ...args: U) => { parts: TParts; raw: TRaw; args: U; } +>`part\1${''}part\2` : string +>'' : "" + +var a: {}; +>a : { parts: ["part1", "part2"]; raw: ["part\\1", "part\\2"]; args: [string]; } + diff --git a/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.types b/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.types index 7fe10c652b5b7..867cf41149030 100644 --- a/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.types +++ b/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.types @@ -1,7 +1,7 @@ === tests/cases/compiler/taggedTemplatesWithIncompleteNoSubstitutionTemplate1.ts === function f(x: TemplateStringsArray, y: string, z: string) { >f : (x: TemplateStringsArray, y: string, z: string) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : string >z : string } @@ -9,6 +9,6 @@ function f(x: TemplateStringsArray, y: string, z: string) { // Incomplete call, not enough parameters. f `123qdawdrqw >f `123qdawdrqw : void ->f : (x: TemplateStringsArray, y: string, z: string) => void +>f : (x: TemplateStringsArray, y: string, z: string) => void >`123qdawdrqw : "123qdawdrqw" diff --git a/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.types b/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.types index 99606ba838a8b..b3b8aab197ab5 100644 --- a/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.types +++ b/tests/baselines/reference/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.types @@ -1,7 +1,7 @@ === tests/cases/compiler/taggedTemplatesWithIncompleteNoSubstitutionTemplate2.ts === function f(x: TemplateStringsArray, y: string, z: string) { >f : (x: TemplateStringsArray, y: string, z: string) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : string >z : string } @@ -9,6 +9,6 @@ function f(x: TemplateStringsArray, y: string, z: string) { // Incomplete call, not enough parameters, at EOF. f ` >f ` : void ->f : (x: TemplateStringsArray, y: string, z: string) => void +>f : (x: TemplateStringsArray, y: string, z: string) => void >` : "" diff --git a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions1.types b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions1.types index 16e40b638aa85..5f3424a0d9970 100644 --- a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions1.types +++ b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions1.types @@ -1,7 +1,7 @@ === tests/cases/compiler/taggedTemplatesWithIncompleteTemplateExpressions1.ts === function f(x: TemplateStringsArray, y: string, z: string) { >f : (x: TemplateStringsArray, y: string, z: string) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : string >z : string } @@ -9,7 +9,7 @@ function f(x: TemplateStringsArray, y: string, z: string) { // Incomplete call, not enough parameters. f `123qdawdrqw${ >f `123qdawdrqw${ : void ->f : (x: TemplateStringsArray, y: string, z: string) => void +>f : (x: TemplateStringsArray, y: string, z: string) => void >`123qdawdrqw${ : string > : any diff --git a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions2.types b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions2.types index 600d85805ee3b..0aeb21caee6de 100644 --- a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions2.types +++ b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions2.types @@ -1,7 +1,7 @@ === tests/cases/compiler/taggedTemplatesWithIncompleteTemplateExpressions2.ts === function f(x: TemplateStringsArray, y: string, z: string) { >f : (x: TemplateStringsArray, y: string, z: string) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : string >z : string } @@ -9,7 +9,7 @@ function f(x: TemplateStringsArray, y: string, z: string) { // Incomplete call, enough parameters. f `123qdawdrqw${ }${ >f `123qdawdrqw${ }${ : void ->f : (x: TemplateStringsArray, y: string, z: string) => void +>f : (x: TemplateStringsArray, y: string, z: string) => void >`123qdawdrqw${ }${ : string > : any > : any diff --git a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions3.types b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions3.types index dd512edab241f..c55fbc8b406ea 100644 --- a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions3.types +++ b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions3.types @@ -1,7 +1,7 @@ === tests/cases/compiler/taggedTemplatesWithIncompleteTemplateExpressions3.ts === function f(x: TemplateStringsArray, y: string, z: string) { >f : (x: TemplateStringsArray, y: string, z: string) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : string >z : string } @@ -9,7 +9,7 @@ function f(x: TemplateStringsArray, y: string, z: string) { // Incomplete call, not enough parameters. f `123qdawdrqw${ 1 }${ >f `123qdawdrqw${ 1 }${ : void ->f : (x: TemplateStringsArray, y: string, z: string) => void +>f : (x: TemplateStringsArray, y: string, z: string) => void >`123qdawdrqw${ 1 }${ : string >1 : 1 > : any diff --git a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions4.types b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions4.types index 8fb37587be28d..7573ca2a01121 100644 --- a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions4.types +++ b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions4.types @@ -1,7 +1,7 @@ === tests/cases/compiler/taggedTemplatesWithIncompleteTemplateExpressions4.ts === function f(x: TemplateStringsArray, y: string, z: string) { >f : (x: TemplateStringsArray, y: string, z: string) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : string >z : string } @@ -9,7 +9,7 @@ function f(x: TemplateStringsArray, y: string, z: string) { // Incomplete call, but too many parameters. f `123qdawdrqw${ 1 }${ }${ >f `123qdawdrqw${ 1 }${ }${ : void ->f : (x: TemplateStringsArray, y: string, z: string) => void +>f : (x: TemplateStringsArray, y: string, z: string) => void >`123qdawdrqw${ 1 }${ }${ : string >1 : 1 > : any diff --git a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions5.types b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions5.types index b83f6fd5770ed..a564a42f29157 100644 --- a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions5.types +++ b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions5.types @@ -1,7 +1,7 @@ === tests/cases/compiler/taggedTemplatesWithIncompleteTemplateExpressions5.ts === function f(x: TemplateStringsArray, y: string, z: string) { >f : (x: TemplateStringsArray, y: string, z: string) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : string >z : string } @@ -9,7 +9,7 @@ function f(x: TemplateStringsArray, y: string, z: string) { // Incomplete call, but too many parameters. f `123qdawdrqw${ 1 }${ 2 }${ >f `123qdawdrqw${ 1 }${ 2 }${ : void ->f : (x: TemplateStringsArray, y: string, z: string) => void +>f : (x: TemplateStringsArray, y: string, z: string) => void >`123qdawdrqw${ 1 }${ 2 }${ : string >1 : 1 >2 : 2 diff --git a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions6.types b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions6.types index 6c73c0e59a093..062f4a957d94a 100644 --- a/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions6.types +++ b/tests/baselines/reference/taggedTemplatesWithIncompleteTemplateExpressions6.types @@ -1,7 +1,7 @@ === tests/cases/compiler/taggedTemplatesWithIncompleteTemplateExpressions6.ts === function f(x: TemplateStringsArray, y: string, z: string) { >f : (x: TemplateStringsArray, y: string, z: string) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : string >z : string } @@ -9,7 +9,7 @@ function f(x: TemplateStringsArray, y: string, z: string) { // Incomplete call, not enough parameters, at EOF. f `123qdawdrqw${ 1 }${ >f `123qdawdrqw${ 1 }${ : void ->f : (x: TemplateStringsArray, y: string, z: string) => void +>f : (x: TemplateStringsArray, y: string, z: string) => void >`123qdawdrqw${ 1 }${ : string >1 : 1 > : any diff --git a/tests/baselines/reference/taggedTemplatesWithTypeArguments1.types b/tests/baselines/reference/taggedTemplatesWithTypeArguments1.types index c2719c22877f7..c15338ca73cfc 100644 --- a/tests/baselines/reference/taggedTemplatesWithTypeArguments1.types +++ b/tests/baselines/reference/taggedTemplatesWithTypeArguments1.types @@ -1,7 +1,7 @@ === tests/cases/conformance/es6/templates/taggedTemplatesWithTypeArguments1.ts === declare function f(strs: TemplateStringsArray, ...callbacks: Array<(x: T) => any>): void; >f : (strs: TemplateStringsArray, ...callbacks: ((x: T) => any)[]) => void ->strs : TemplateStringsArray +>strs : TemplateStringsArray >callbacks : ((x: T) => any)[] >x : T @@ -19,7 +19,7 @@ interface Stuff { export const a = f ` >a : void >f ` hello ${stuff => stuff.x} brave ${stuff => stuff.y} world ${stuff => stuff.z}` : void ->f : (strs: TemplateStringsArray, ...callbacks: ((x: T) => any)[]) => void +>f : (strs: TemplateStringsArray, ...callbacks: ((x: T) => any)[]) => void >` hello ${stuff => stuff.x} brave ${stuff => stuff.y} world ${stuff => stuff.z}` : string hello @@ -52,7 +52,7 @@ declare function g( >g : (strs: TemplateStringsArray, t: (i: Input) => T, u: (i: Input) => U, v: (i: Input) => V) => T | U | V strs: TemplateStringsArray, ->strs : TemplateStringsArray +>strs : TemplateStringsArray t: (i: Input) => T, u: (i: Input) => U, v: (i: Input) => V): T | U | V; >t : (i: Input) => T @@ -65,7 +65,7 @@ declare function g( export const b = g ` >b : string | number | boolean >g ` hello ${stuff => stuff.x} brave ${stuff => stuff.y} world ${stuff => stuff.z}` : string | number | boolean ->g : (strs: TemplateStringsArray, t: (i: Input) => T, u: (i: Input) => U, v: (i: Input) => V) => T | U | V +>g : (strs: TemplateStringsArray, t: (i: Input) => T, u: (i: Input) => U, v: (i: Input) => V) => T | U | V >` hello ${stuff => stuff.x} brave ${stuff => stuff.y} world ${stuff => stuff.z}` : string hello @@ -99,7 +99,7 @@ declare let obj: { prop: (strs: TemplateStringsArray, x: (input: T) => T) => { >prop : (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; } ->strs : TemplateStringsArray +>strs : TemplateStringsArray >x : (input: T) => T >input : T @@ -111,8 +111,8 @@ declare let obj: { export let c = obj["prop"] `${(input) => ({ ...input })}` >c : { returnedObjProp: Stuff; } >obj["prop"] `${(input) => ({ ...input })}` : { returnedObjProp: Stuff; } ->obj["prop"] : (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; } ->obj : { prop: (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; }; } +>obj["prop"] : (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; } +>obj : { prop: (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; }; } >"prop" : "prop" >`${(input) => ({ ...input })}` : string >(input) => ({ ...input }) : (input: Stuff) => { x: number; y: string; z: boolean; } @@ -146,9 +146,9 @@ c = obj.prop `${(input) => ({ ...input })}` >c = obj.prop `${(input) => ({ ...input })}` : { returnedObjProp: Stuff; } >c : { returnedObjProp: Stuff; } >obj.prop `${(input) => ({ ...input })}` : { returnedObjProp: Stuff; } ->obj.prop : (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; } ->obj : { prop: (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; }; } ->prop : (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; } +>obj.prop : (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; } +>obj : { prop: (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; }; } +>prop : (strs: TemplateStringsArray, x: (input: T) => T) => { returnedObjProp: T; } >`${(input) => ({ ...input })}` : string >(input) => ({ ...input }) : (input: Stuff) => { x: number; y: string; z: boolean; } >input : Stuff diff --git a/tests/baselines/reference/taggedTemplatesWithTypeArguments2.types b/tests/baselines/reference/taggedTemplatesWithTypeArguments2.types index c78719846cf72..c564c71c726f9 100644 --- a/tests/baselines/reference/taggedTemplatesWithTypeArguments2.types +++ b/tests/baselines/reference/taggedTemplatesWithTypeArguments2.types @@ -1,7 +1,7 @@ === tests/cases/conformance/es6/templates/taggedTemplatesWithTypeArguments2.ts === export interface SomethingTaggable { (t: TemplateStringsArray, ...args: T[]): SomethingNewable; ->t : TemplateStringsArray +>t : TemplateStringsArray >args : T[] } diff --git a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt index 4b300fef8c96d..f48eed8a913ce 100644 --- a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt +++ b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt @@ -1,9 +1,13 @@ -tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(7,3): error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. - Type '{}' is missing the following properties from type 'TemplateStringsArray': raw, length, concat, join, and 10 more. +tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(1,7): error TS2300: Duplicate identifier 'TemplateStringsArray'. +tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(7,3): error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. + Type '{}' is missing the following properties from type 'readonly string[]': length, concat, join, slice, and 9 more. -==== tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts (1 errors) ==== +==== tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts (2 errors) ==== class TemplateStringsArray { + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'TemplateStringsArray'. +!!! related TS6203 /.ts/lib.es5.d.ts:604:6: 'TemplateStringsArray' was also declared here. } function f(x: TemplateStringsArray, y: number, z: number) { @@ -11,7 +15,7 @@ tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(7,3): error TS2 f({}, 10, 10); ~~ -!!! error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2345: Type '{}' is missing the following properties from type 'TemplateStringsArray': raw, length, concat, join, and 10 more. +!!! error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2345: Type '{}' is missing the following properties from type 'readonly string[]': length, concat, join, slice, and 9 more. f `abcdef${ 1234 }${ 5678 }ghijkl`; \ No newline at end of file diff --git a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.symbols b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.symbols index 78e58c22343b0..52a7f32ffdfbf 100644 --- a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.symbols +++ b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.symbols @@ -1,12 +1,12 @@ === tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts === class TemplateStringsArray { ->TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --), Decl(templateStringsArrayTypeDefinedInES5Mode.ts, 0, 0)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(templateStringsArrayTypeDefinedInES5Mode.ts, 0, 0)) } function f(x: TemplateStringsArray, y: number, z: number) { >f : Symbol(f, Decl(templateStringsArrayTypeDefinedInES5Mode.ts, 1, 1)) >x : Symbol(x, Decl(templateStringsArrayTypeDefinedInES5Mode.ts, 3, 11)) ->TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --), Decl(templateStringsArrayTypeDefinedInES5Mode.ts, 0, 0)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --)) >y : Symbol(y, Decl(templateStringsArrayTypeDefinedInES5Mode.ts, 3, 35)) >z : Symbol(z, Decl(templateStringsArrayTypeDefinedInES5Mode.ts, 3, 46)) } diff --git a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.types b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.types index 1ffd2e8305e72..e52607fe492fa 100644 --- a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.types +++ b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.types @@ -5,21 +5,21 @@ class TemplateStringsArray { function f(x: TemplateStringsArray, y: number, z: number) { >f : (x: TemplateStringsArray, y: number, z: number) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : number >z : number } f({}, 10, 10); >f({}, 10, 10) : void ->f : (x: TemplateStringsArray, y: number, z: number) => void +>f : (x: TemplateStringsArray, y: number, z: number) => void >{} : {} >10 : 10 >10 : 10 f `abcdef${ 1234 }${ 5678 }ghijkl`; >f `abcdef${ 1234 }${ 5678 }ghijkl` : void ->f : (x: TemplateStringsArray, y: number, z: number) => void +>f : (x: TemplateStringsArray, y: number, z: number) => void >`abcdef${ 1234 }${ 5678 }ghijkl` : string >1234 : 1234 >5678 : 5678 diff --git a/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt b/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt index 989483bda62d1..85d8fa38fb556 100644 --- a/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt +++ b/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt @@ -1,5 +1,5 @@ -tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(4,3): error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. - Type '{}' is missing the following properties from type 'TemplateStringsArray': raw, length, concat, join, and 10 more. +tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(4,3): error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. + Type '{}' is missing the following properties from type 'readonly string[]': length, concat, join, slice, and 9 more. ==== tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts (1 errors) ==== @@ -8,7 +8,7 @@ tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(4,3): error TS f({}, 10, 10); ~~ -!!! error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2345: Type '{}' is missing the following properties from type 'TemplateStringsArray': raw, length, concat, join, and 10 more. +!!! error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2345: Type '{}' is missing the following properties from type 'readonly string[]': length, concat, join, slice, and 9 more. f `abcdef${ 1234 }${ 5678 }ghijkl`; \ No newline at end of file diff --git a/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.types b/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.types index 5deba77862b6b..eb48d0ab11151 100644 --- a/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.types +++ b/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.types @@ -1,21 +1,21 @@ === tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts === function f(x: TemplateStringsArray, y: number, z: number) { >f : (x: TemplateStringsArray, y: number, z: number) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : number >z : number } f({}, 10, 10); >f({}, 10, 10) : void ->f : (x: TemplateStringsArray, y: number, z: number) => void +>f : (x: TemplateStringsArray, y: number, z: number) => void >{} : {} >10 : 10 >10 : 10 f `abcdef${ 1234 }${ 5678 }ghijkl`; >f `abcdef${ 1234 }${ 5678 }ghijkl` : void ->f : (x: TemplateStringsArray, y: number, z: number) => void +>f : (x: TemplateStringsArray, y: number, z: number) => void >`abcdef${ 1234 }${ 5678 }ghijkl` : string >1234 : 1234 >5678 : 5678 diff --git a/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt index 666df6d35cb5f..91ba08643a10c 100644 --- a/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt +++ b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt @@ -1,9 +1,13 @@ -tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts(7,3): error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. - Type '{}' is missing the following properties from type 'TemplateStringsArray': raw, length, concat, join, and 16 more. +tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts(1,7): error TS2300: Duplicate identifier 'TemplateStringsArray'. +tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts(7,3): error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. + Type '{}' is missing the following properties from type 'readonly string[]': length, concat, join, slice, and 15 more. -==== tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts (1 errors) ==== +==== tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts (2 errors) ==== class TemplateStringsArray { + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'TemplateStringsArray'. +!!! related TS6203 /.ts/lib.es5.d.ts:604:6: 'TemplateStringsArray' was also declared here. } function f(x: TemplateStringsArray, y: number, z: number) { @@ -11,7 +15,7 @@ tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts(7,3): error T f({}, 10, 10); ~~ -!!! error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. -!!! error TS2345: Type '{}' is missing the following properties from type 'TemplateStringsArray': raw, length, concat, join, and 16 more. +!!! error TS2345: Argument of type '{}' is not assignable to parameter of type 'TemplateStringsArray'. +!!! error TS2345: Type '{}' is missing the following properties from type 'readonly string[]': length, concat, join, slice, and 15 more. f `abcdef${ 1234 }${ 5678 }ghijkl`; \ No newline at end of file diff --git a/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.symbols b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.symbols index f65f949fcb9b8..6b77e89bb31bf 100644 --- a/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.symbols +++ b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.symbols @@ -1,12 +1,12 @@ === tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts === class TemplateStringsArray { ->TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --), Decl(templateStringsArrayTypeRedefinedInES6Mode.ts, 0, 0)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(templateStringsArrayTypeRedefinedInES6Mode.ts, 0, 0)) } function f(x: TemplateStringsArray, y: number, z: number) { >f : Symbol(f, Decl(templateStringsArrayTypeRedefinedInES6Mode.ts, 1, 1)) >x : Symbol(x, Decl(templateStringsArrayTypeRedefinedInES6Mode.ts, 3, 11)) ->TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --), Decl(templateStringsArrayTypeRedefinedInES6Mode.ts, 0, 0)) +>TemplateStringsArray : Symbol(TemplateStringsArray, Decl(lib.es5.d.ts, --, --)) >y : Symbol(y, Decl(templateStringsArrayTypeRedefinedInES6Mode.ts, 3, 35)) >z : Symbol(z, Decl(templateStringsArrayTypeRedefinedInES6Mode.ts, 3, 46)) } diff --git a/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.types b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.types index 6fca2974a3dab..11da0eb9e42a8 100644 --- a/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.types +++ b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.types @@ -5,21 +5,21 @@ class TemplateStringsArray { function f(x: TemplateStringsArray, y: number, z: number) { >f : (x: TemplateStringsArray, y: number, z: number) => void ->x : TemplateStringsArray +>x : TemplateStringsArray >y : number >z : number } f({}, 10, 10); >f({}, 10, 10) : void ->f : (x: TemplateStringsArray, y: number, z: number) => void +>f : (x: TemplateStringsArray, y: number, z: number) => void >{} : {} >10 : 10 >10 : 10 f `abcdef${ 1234 }${ 5678 }ghijkl`; >f `abcdef${ 1234 }${ 5678 }ghijkl` : void ->f : (x: TemplateStringsArray, y: number, z: number) => void +>f : (x: TemplateStringsArray, y: number, z: number) => void >`abcdef${ 1234 }${ 5678 }ghijkl` : string >1234 : 1234 >5678 : 5678 diff --git a/tests/baselines/reference/thisTypeInTaggedTemplateCall.types b/tests/baselines/reference/thisTypeInTaggedTemplateCall.types index 4c64229924e71..65eae1828f3f0 100644 --- a/tests/baselines/reference/thisTypeInTaggedTemplateCall.types +++ b/tests/baselines/reference/thisTypeInTaggedTemplateCall.types @@ -5,7 +5,7 @@ class Foo { static m(this: new () => T, strings: TemplateStringsArray | string) { >m : (this: new () => T, strings: TemplateStringsArray | string) => T >this : new () => T ->strings : string | TemplateStringsArray +>strings : string | TemplateStringsArray return new this() >new this() : T @@ -15,16 +15,16 @@ class Foo { Foo.m`test`; >Foo.m`test` : Foo ->Foo.m : (this: new () => T, strings: string | TemplateStringsArray) => T +>Foo.m : (this: new () => T, strings: string | TemplateStringsArray) => T >Foo : typeof Foo ->m : (this: new () => T, strings: string | TemplateStringsArray) => T +>m : (this: new () => T, strings: string | TemplateStringsArray) => T >`test` : "test" (Foo.m)`test`; >(Foo.m)`test` : Foo ->(Foo.m) : (this: new () => T, strings: string | TemplateStringsArray) => T ->Foo.m : (this: new () => T, strings: string | TemplateStringsArray) => T +>(Foo.m) : (this: new () => T, strings: string | TemplateStringsArray) => T +>Foo.m : (this: new () => T, strings: string | TemplateStringsArray) => T >Foo : typeof Foo ->m : (this: new () => T, strings: string | TemplateStringsArray) => T +>m : (this: new () => T, strings: string | TemplateStringsArray) => T >`test` : "test" diff --git a/tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts b/tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts index 17f2ea6b84814..d1f3182aed076 100644 --- a/tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts +++ b/tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInference.ts @@ -90,3 +90,13 @@ var a: any; var arr = someGenerics9 `${ [] }${ null }${ undefined }`; var arr: any[]; +// Generic tag with a generic type for TemplateStringsArray +function someGenerics10(strs: TemplateStringsArray, ...args: U): {parts: T; args: U} { + return null; +} +var a10a = someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }`; +var a10a: {}; + +var a10b = someGenerics10 `no substitution`; +var a10b: {}; + diff --git a/tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts b/tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts index a0ca1aa67d6c4..352ae614f9c82 100644 --- a/tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts +++ b/tests/cases/conformance/es6/templates/taggedTemplateStringsTypeArgumentInferenceES6.ts @@ -90,3 +90,13 @@ var a: any; var arr = someGenerics9 `${ [] }${ null }${ undefined }`; var arr: any[]; +// Generic tag with a generic type for TemplateStringsArray +function someGenerics10(strs: TemplateStringsArray, ...args: U): {parts: T; args: U} { + return null; +} +var a10a = someGenerics10 `part1${ '' }part2${ 0 }part3${ [] }`; +var a10a: {}; + +var a10b = someGenerics10 `no substitution`; +var a10b: {}; + diff --git a/tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringParts.ts b/tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringParts.ts new file mode 100644 index 0000000000000..8c3faf7e6e35b --- /dev/null +++ b/tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringParts.ts @@ -0,0 +1,30 @@ +type DataTypes = 'string'|'number'|'boolean'; + +interface DataTypesToTypeScriptType { + string: string; + number: number; + boolean: boolean; +} + +type ArgsFor = + TParts extends [infer THead, ...infer TTail] + ? THead extends DataTypes + ? [DataTypesToTypeScriptType[THead], ...ArgsFor] + : [never, ...ArgsFor] + : [] + +declare function dataTypes>( + parts: TemplateStringsArray, + ...args: TArgs): unknown; + +dataTypes `string${'abc'}`; + +dataTypes `number${5}`; + +dataTypes `boolean${true}`; + +dataTypes `unknown${[]}`; + +dataTypes `string${3}`; + +dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; diff --git a/tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringPartsES6.ts b/tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringPartsES6.ts new file mode 100644 index 0000000000000..1fc13376caa29 --- /dev/null +++ b/tests/cases/conformance/es6/templates/taggedTemplateStringsWithGenericStringPartsES6.ts @@ -0,0 +1,32 @@ +// @target: ES6 + +type DataTypes = 'string'|'number'|'boolean'; + +interface DataTypesToTypeScriptType { + string: string; + number: number; + boolean: boolean; +} + +type ArgsFor = + TParts extends [infer THead, ...infer TTail] + ? THead extends DataTypes + ? [DataTypesToTypeScriptType[THead], ...ArgsFor] + : [never, ...ArgsFor] + : [] + +declare function dataTypes>( + parts: TemplateStringsArray, + ...args: TArgs): unknown; + +dataTypes `string${'abc'}`; + +dataTypes `number${5}`; + +dataTypes `boolean${true}`; + +dataTypes `unknown${[]}`; + +dataTypes `string${3}`; + +dataTypes `string${'abc'}string${'def'}number${10}boolean${false}`; diff --git a/tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInference.ts b/tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInference.ts new file mode 100644 index 0000000000000..eeacd38c6efbf --- /dev/null +++ b/tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInference.ts @@ -0,0 +1,6 @@ +function tag(strs: TemplateStringsArray, ...args: U): {parts: TParts; raw: TRaw; args: U} { + return null; +} + +var a = tag `part\1${''}part\2`; +var a: {}; diff --git a/tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInferenceES6.ts b/tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInferenceES6.ts new file mode 100644 index 0000000000000..1b97074e03555 --- /dev/null +++ b/tests/cases/conformance/es6/templates/taggedTemplatesRawPartsInferenceES6.ts @@ -0,0 +1,8 @@ +// @target: ES6 + +function tag(strs: TemplateStringsArray, ...args: U): {parts: TParts; raw: TRaw; args: U} { + return null; +} + +var a = tag `part\1${''}part\2`; +var a: {}; diff --git a/tests/cases/fourslash/completionListInTaggedTemplateLiteral1.ts b/tests/cases/fourslash/completionListInTaggedTemplateLiteral1.ts new file mode 100644 index 0000000000000..2de3508eb3d13 --- /dev/null +++ b/tests/cases/fourslash/completionListInTaggedTemplateLiteral1.ts @@ -0,0 +1,16 @@ +/// +// @Target: ES6 + +////type Args = 'foo'|'bar'; +//// +////declare function tag(parts: TemplateStringsArray, ...args: T); +//// +////tag`${ '/*1*/' }` +////tag`${ 'fo/*2*/o' }` +////tag`${ 'ba/*3*/r' }` + +verify.completions( + { marker: "1", exact: ["foo", "bar"]}, + { marker: "2", exact: ["foo"]}, + { marker: "3", exact: ["bar"]}, +); diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts index 98936bfcc562d..53768325bc5d1 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags3.ts @@ -10,7 +10,7 @@ verify.signatureHelp({ marker: test.markers(), overloadsCount: 3, - text: "f(templateStrings: TemplateStringsArray, p1_o3: string, p2_o3: boolean, p3_o3: number): boolean", + text: "f(templateStrings: TemplateStringsArray, p1_o3: string, p2_o3: boolean, p3_o3: number): boolean", argumentCount: 3, parameterCount: 4, parameterName: "p1_o3", diff --git a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts index 8e77f60b5c018..1f0c4de0789ab 100644 --- a/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts +++ b/tests/cases/fourslash/signatureHelpTaggedTemplatesWithOverloadedTags7.ts @@ -10,7 +10,7 @@ verify.signatureHelp({ marker: test.markers(), overloadsCount: 3, - text: "f(templateStrings: TemplateStringsArray, p1_o3: string, p2_o3: boolean, p3_o3: number): boolean", + text: "f(templateStrings: TemplateStringsArray, p1_o3: string, p2_o3: boolean, p3_o3: number): boolean", argumentCount: 3, parameterCount: 4, parameterName: "p2_o3",