Skip to content

Commit 78a9924

Browse files
authored
Reuse input type nodes when serializing signature parameter and return types (#37444)
* Accept change * Accept the huge set of ever so slightly changed baselines * Update return type logic to only reuse nodes if original nodes share scope with current node, like property types, only reuse nodes if symbols referened are acessible, reuse nodes for property signatures, too * Only reuse nodes when a context is provided (otherwise identifier printback may fail) * Only track symbol if symbol is found and no error is recorded * Fix type parameter reuse lookup * Forbid cjs module.exports references in retained nodes * Adjust check for cjs export references to not include bad module type in output * Add symbol to all identifiers we see in existing nodes for quickinfo * Accept fourslash baseline updates * Accept slightly updated baseline post-merge * Do not copy original nodes for error types, replace empty type references with any
1 parent 5596ed8 commit 78a9924

File tree

636 files changed

+2621
-2467
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

636 files changed

+2621
-2467
lines changed

src/compiler/checker.ts

Lines changed: 212 additions & 162 deletions
Large diffs are not rendered by default.

src/compiler/utilities.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2114,10 +2114,13 @@ namespace ts {
21142114
return isIdentifier(node) && node.escapedText === "exports";
21152115
}
21162116

2117+
export function isModuleIdentifier(node: Node) {
2118+
return isIdentifier(node) && node.escapedText === "module";
2119+
}
2120+
21172121
export function isModuleExportsAccessExpression(node: Node): node is LiteralLikeElementAccessExpression & { expression: Identifier } {
21182122
return (isPropertyAccessExpression(node) || isLiteralLikeElementAccess(node))
2119-
&& isIdentifier(node.expression)
2120-
&& node.expression.escapedText === "module"
2123+
&& isModuleIdentifier(node.expression)
21212124
&& getElementOrPropertyAccessName(node) === "exports";
21222125
}
21232126

tests/baselines/reference/1.0lib-noErrors.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1884,7 +1884,7 @@ interface Array<T> {
18841884
>n : number
18851885
}
18861886
declare var Array: {
1887-
>Array : { (arrayLength?: number): any[]; <T>(arrayLength: number): T[]; <T>(...items: T[]): T[]; new (arrayLength?: number): any[]; new <T>(arrayLength: number): T[]; new <T>(...items: T[]): T[]; isArray(arg: any): boolean; prototype: any[]; }
1887+
>Array : { (arrayLength?: number): any[]; <T>(arrayLength: number): T[]; <T>(...items: T[]): T[]; new (arrayLength?: number): any[]; new <T>(arrayLength: number): T[]; new <T>(...items: T[]): T[]; isArray(arg: any): boolean; prototype: Array<any>; }
18881888

18891889
new (arrayLength?: number): any[];
18901890
>arrayLength : number

tests/baselines/reference/ExportObjectLiteralAndObjectTypeLiteralWithAccessibleTypesInNestedMemberTypeAnnotations.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module A {
1111
}
1212

1313
export var UnitSquare : {
14-
>UnitSquare : { top: { left: Point; right: Point; }; bottom: { left: Point; right: Point; }; }
14+
>UnitSquare : { top: { left: Point; right: Point;}; bottom: { left: Point; right: Point;}; }
1515

1616
top: { left: Point, right: Point },
1717
>top : { left: Point; right: Point; }

tests/baselines/reference/FunctionAndModuleWithSameNameAndCommonRoot.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ module A {
3333

3434
=== tests/cases/conformance/internalModules/DeclarationMerging/test.ts ===
3535
var fn: () => { x: number; y: number };
36-
>fn : () => { x: number; y: number; }
36+
>fn : () => { x: number; y: number;}
3737
>x : number
3838
>y : number
3939

tests/baselines/reference/FunctionAndModuleWithSameNameAndDifferentCommonRoot.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ module B {
3333

3434
=== tests/cases/conformance/internalModules/DeclarationMerging/test.ts ===
3535
var fn: () => { x: number; y: number };
36-
>fn : () => { x: number; y: number; }
36+
>fn : () => { x: number; y: number;}
3737
>x : number
3838
>y : number
3939

tests/baselines/reference/ModuleWithExportedAndNonExportedImportAlias.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ var p = Geometry.Origin;
8282
>Origin : A.Point
8383

8484
var line: { start: { x: number; y: number }; end: { x: number; y: number; } };
85-
>line : { start: { x: number; y: number; }; end: { x: number; y: number; }; }
85+
>line : { start: { x: number; y: number;}; end: { x: number; y: number;}; }
8686
>start : { x: number; y: number; }
8787
>x : number
8888
>y : number

tests/baselines/reference/TypeGuardWithEnumUnion.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ enum Color { R, G, B }
66
>B : Color.B
77

88
function f1(x: Color | string) {
9-
>f1 : (x: string | Color) => void
9+
>f1 : (x: Color | string) => void
1010
>x : string | Color
1111

1212
if (typeof x === "number") {
@@ -33,7 +33,7 @@ function f1(x: Color | string) {
3333
}
3434

3535
function f2(x: Color | string | string[]) {
36-
>f2 : (x: string | Color | string[]) => void
36+
>f2 : (x: Color | string | string[]) => void
3737
>x : string | Color | string[]
3838

3939
if (typeof x === "object") {

tests/baselines/reference/aliasUsageInObjectLiteral.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var b: { x: IHasVisualizationModel } = { x: moduleA };
2828
>moduleA : typeof moduleA
2929

3030
var c: { y: { z: IHasVisualizationModel } } = { y: { z: moduleA } };
31-
>c : { y: { z: IHasVisualizationModel; }; }
31+
>c : { y: { z: IHasVisualizationModel;}; }
3232
>y : { z: IHasVisualizationModel; }
3333
>z : IHasVisualizationModel
3434
>{ y: { z: moduleA } } : { y: { z: typeof moduleA; }; }

tests/baselines/reference/ambientErrors.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ declare function fn(x: number): string;
1010
>x : number
1111

1212
declare function fn(x: 'foo'): number;
13-
>fn : { (x: number): string; (x: "foo"): number; }
13+
>fn : { (x: number): string; (x: 'foo'): number; }
1414
>x : "foo"
1515

1616
// Ambient functions with duplicate signatures

tests/baselines/reference/anyAssignabilityInInheritance.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ var r3 = foo3(a); // any
8383
>a : any
8484

8585
declare function foo7(x: { bar: number }): { bar: number };
86-
>foo7 : { (x: { bar: number; }): { bar: number; }; (x: any): any; }
86+
>foo7 : { (x: { bar: number;}): { bar: number;}; (x: any): any; }
8787
>x : { bar: number; }
8888
>bar : number
8989
>bar : number

tests/baselines/reference/argumentExpressionContextualTyping.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ var o = { x: ["string", 1], y: { c: true, d: "world", e: 3 } };
4545
>3 : 3
4646

4747
var o1: { x: [string, number], y: { c: boolean, d: string, e: number } } = { x: ["string", 1], y: { c: true, d: "world", e: 3 } };
48-
>o1 : { x: [string, number]; y: { c: boolean; d: string; e: number; }; }
48+
>o1 : { x: [string, number]; y: { c: boolean; d: string; e: number;}; }
4949
>x : [string, number]
5050
>y : { c: boolean; d: string; e: number; }
5151
>c : boolean

tests/baselines/reference/arrayConcat3.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ type Fn<T extends object> = <U extends T>(subj: U) => U
55
>subj : U
66

77
function doStuff<T extends object, T1 extends T>(a: Array<Fn<T>>, b: Array<Fn<T1>>) {
8-
>doStuff : <T extends object, T1 extends T>(a: Fn<T>[], b: Fn<T1>[]) => void
8+
>doStuff : <T extends object, T1 extends T>(a: Array<Fn<T>>, b: Array<Fn<T1>>) => void
99
>a : Fn<T>[]
1010
>b : Fn<T1>[]
1111

tests/baselines/reference/arrayFlatMap.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ array.flatMap((): ReadonlyArray<number> => []); // ok
1212
>array.flatMap : <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]
1313
>array : number[]
1414
>flatMap : <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]
15-
>(): ReadonlyArray<number> => [] : () => readonly number[]
15+
>(): ReadonlyArray<number> => [] : () => ReadonlyArray<number>
1616
>[] : undefined[]
1717

1818
readonlyArray.flatMap((): ReadonlyArray<number> => []); // ok
1919
>readonlyArray.flatMap((): ReadonlyArray<number> => []) : number[]
2020
>readonlyArray.flatMap : <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]
2121
>readonlyArray : readonly number[]
2222
>flatMap : <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]
23-
>(): ReadonlyArray<number> => [] : () => readonly number[]
23+
>(): ReadonlyArray<number> => [] : () => ReadonlyArray<number>
2424
>[] : undefined[]
2525

tests/baselines/reference/arrayLiteralWithMultipleBestCommonTypes.types

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,28 +56,28 @@ var es = [(x: string) => 2, (x: Object) => 1]; // { (x:string) => number }[]
5656
>1 : 1
5757

5858
var fs = [(a: { x: number; y?: number }) => 1, (b: { x: number; z?: number }) => 2]; // (a: { x: number; y?: number }) => number[]
59-
>fs : (((a: { x: number; y?: number; }) => number) | ((b: { x: number; z?: number; }) => number))[]
60-
>[(a: { x: number; y?: number }) => 1, (b: { x: number; z?: number }) => 2] : (((a: { x: number; y?: number; }) => number) | ((b: { x: number; z?: number; }) => number))[]
61-
>(a: { x: number; y?: number }) => 1 : (a: { x: number; y?: number; }) => number
59+
>fs : (((a: { x: number; y?: number;}) => number) | ((b: { x: number; z?: number;}) => number))[]
60+
>[(a: { x: number; y?: number }) => 1, (b: { x: number; z?: number }) => 2] : (((a: { x: number; y?: number;}) => number) | ((b: { x: number; z?: number;}) => number))[]
61+
>(a: { x: number; y?: number }) => 1 : (a: { x: number; y?: number;}) => number
6262
>a : { x: number; y?: number; }
6363
>x : number
6464
>y : number
6565
>1 : 1
66-
>(b: { x: number; z?: number }) => 2 : (b: { x: number; z?: number; }) => number
66+
>(b: { x: number; z?: number }) => 2 : (b: { x: number; z?: number;}) => number
6767
>b : { x: number; z?: number; }
6868
>x : number
6969
>z : number
7070
>2 : 2
7171

7272
var gs = [(b: { x: number; z?: number }) => 2, (a: { x: number; y?: number }) => 1]; // (b: { x: number; z?: number }) => number[]
73-
>gs : (((b: { x: number; z?: number; }) => number) | ((a: { x: number; y?: number; }) => number))[]
74-
>[(b: { x: number; z?: number }) => 2, (a: { x: number; y?: number }) => 1] : (((b: { x: number; z?: number; }) => number) | ((a: { x: number; y?: number; }) => number))[]
75-
>(b: { x: number; z?: number }) => 2 : (b: { x: number; z?: number; }) => number
73+
>gs : (((b: { x: number; z?: number;}) => number) | ((a: { x: number; y?: number;}) => number))[]
74+
>[(b: { x: number; z?: number }) => 2, (a: { x: number; y?: number }) => 1] : (((b: { x: number; z?: number;}) => number) | ((a: { x: number; y?: number;}) => number))[]
75+
>(b: { x: number; z?: number }) => 2 : (b: { x: number; z?: number;}) => number
7676
>b : { x: number; z?: number; }
7777
>x : number
7878
>z : number
7979
>2 : 2
80-
>(a: { x: number; y?: number }) => 1 : (a: { x: number; y?: number; }) => number
80+
>(a: { x: number; y?: number }) => 1 : (a: { x: number; y?: number;}) => number
8181
>a : { x: number; y?: number; }
8282
>x : number
8383
>y : number

tests/baselines/reference/arraySigChecking.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ myArray = [[1, 2]];
5050
>2 : 2
5151

5252
function isEmpty(l: { length: number }) {
53-
>isEmpty : (l: { length: number; }) => boolean
53+
>isEmpty : (l: { length: number;}) => boolean
5454
>l : { length: number; }
5555
>length : number
5656

tests/baselines/reference/assignmentCompatBug5.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
=== tests/cases/compiler/assignmentCompatBug5.ts ===
22
function foo1(x: { a: number; }) { }
3-
>foo1 : (x: { a: number; }) => void
3+
>foo1 : (x: { a: number;}) => void
44
>x : { a: number; }
55
>a : number
66

tests/baselines/reference/assignmentCompatFunctionsWithOptionalArgs.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
=== tests/cases/compiler/assignmentCompatFunctionsWithOptionalArgs.ts ===
22
function foo(x: { id: number; name?: string; }): void;
3-
>foo : (x: { id: number; name?: string; }) => void
3+
>foo : (x: { id: number; name?: string;}) => void
44
>x : { id: number; name?: string; }
55
>id : number
66
>name : string

tests/baselines/reference/assignmentCompatOnNew.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class Foo{};
33
>Foo : Foo
44

55
function bar(x: {new(): Foo;}){}
6-
>bar : (x: new () => Foo) => void
6+
>bar : (x: { new (): Foo;}) => void
77
>x : new () => Foo
88

99
bar(Foo); // Error, but should be allowed

tests/baselines/reference/assignmentCompatWithCallSignatures3.types

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,25 +74,25 @@ var a10: (...x: Derived[]) => Derived;
7474
>x : Derived[]
7575

7676
var a11: (x: { foo: string }, y: { foo: string; bar: string }) => Base;
77-
>a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base
77+
>a11 : (x: { foo: string;}, y: { foo: string; bar: string;}) => Base
7878
>x : { foo: string; }
7979
>foo : string
8080
>y : { foo: string; bar: string; }
8181
>foo : string
8282
>bar : string
8383

8484
var a12: (x: Array<Base>, y: Array<Derived2>) => Array<Derived>;
85-
>a12 : (x: Base[], y: Derived2[]) => Derived[]
85+
>a12 : (x: Array<Base>, y: Array<Derived2>) => Array<Derived>
8686
>x : Base[]
8787
>y : Derived2[]
8888

8989
var a13: (x: Array<Base>, y: Array<Derived>) => Array<Derived>;
90-
>a13 : (x: Base[], y: Derived[]) => Derived[]
90+
>a13 : (x: Array<Base>, y: Array<Derived>) => Array<Derived>
9191
>x : Base[]
9292
>y : Derived[]
9393

9494
var a14: (x: { a: string; b: number }) => Object;
95-
>a14 : (x: { a: string; b: number; }) => Object
95+
>a14 : (x: { a: string; b: number;}) => Object
9696
>x : { a: string; b: number; }
9797
>a : string
9898
>b : number
@@ -274,10 +274,10 @@ b8 = a8; // ok
274274
>a8 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived
275275

276276
var b9: <T extends Base, U extends Derived>(x: (arg: T) => U, y: (arg2: { foo: string; bing: number }) => U) => (r: T) => U;
277-
>b9 : <T extends Base, U extends Derived>(x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U
277+
>b9 : <T extends Base, U extends Derived>(x: (arg: T) => U, y: (arg2: { foo: string; bing: number;}) => U) => (r: T) => U
278278
>x : (arg: T) => U
279279
>arg : T
280-
>y : (arg2: { foo: string; bing: number; }) => U
280+
>y : (arg2: { foo: string; bing: number;}) => U
281281
>arg2 : { foo: string; bing: number; }
282282
>foo : string
283283
>bing : number
@@ -323,7 +323,7 @@ b11 = a11; // ok
323323
>a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base
324324

325325
var b12: <T extends Array<Base>>(x: Array<Base>, y: T) => Array<Derived>;
326-
>b12 : <T extends Base[]>(x: Base[], y: T) => Derived[]
326+
>b12 : <T extends Base[]>(x: Array<Base>, y: T) => Array<Derived>
327327
>x : Base[]
328328
>y : T
329329

@@ -338,7 +338,7 @@ b12 = a12; // ok
338338
>a12 : (x: Base[], y: Derived2[]) => Derived[]
339339

340340
var b13: <T extends Array<Derived>>(x: Array<Base>, y: T) => T;
341-
>b13 : <T extends Derived[]>(x: Base[], y: T) => T
341+
>b13 : <T extends Derived[]>(x: Array<Base>, y: T) => T
342342
>x : Base[]
343343
>y : T
344344

tests/baselines/reference/assignmentCompatWithCallSignatures4.types

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,15 @@ module Errors {
5050
>x : Base[]
5151

5252
var a11: (x: { foo: string }, y: { foo: string; bar: string }) => Base;
53-
>a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base
53+
>a11 : (x: { foo: string;}, y: { foo: string; bar: string;}) => Base
5454
>x : { foo: string; }
5555
>foo : string
5656
>y : { foo: string; bar: string; }
5757
>foo : string
5858
>bar : string
5959

6060
var a12: (x: Array<Base>, y: Array<Derived2>) => Array<Derived>;
61-
>a12 : (x: Base[], y: Derived2[]) => Derived[]
61+
>a12 : (x: Array<Base>, y: Array<Derived2>) => Array<Derived>
6262
>x : Base[]
6363
>y : Derived2[]
6464

@@ -73,7 +73,7 @@ module Errors {
7373

7474
};
7575
var a15: (x: { a: string; b: number }) => number;
76-
>a15 : (x: { a: string; b: number; }) => number
76+
>a15 : (x: { a: string; b: number;}) => number
7777
>x : { a: string; b: number; }
7878
>a : string
7979
>b : number
@@ -158,10 +158,10 @@ module Errors {
158158
>a7 : (x: (arg: Base) => Derived) => (r: Base) => Derived2
159159

160160
var b8: <T extends Base, U extends Derived>(x: (arg: T) => U, y: (arg2: { foo: number; }) => U) => (r: T) => U;
161-
>b8 : <T extends Base, U extends Derived>(x: (arg: T) => U, y: (arg2: { foo: number; }) => U) => (r: T) => U
161+
>b8 : <T extends Base, U extends Derived>(x: (arg: T) => U, y: (arg2: { foo: number;}) => U) => (r: T) => U
162162
>x : (arg: T) => U
163163
>arg : T
164-
>y : (arg2: { foo: number; }) => U
164+
>y : (arg2: { foo: number;}) => U
165165
>arg2 : { foo: number; }
166166
>foo : number
167167
>r : T
@@ -207,7 +207,7 @@ module Errors {
207207
>a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base
208208

209209
var b12: <T extends Array<Derived2>>(x: Array<Base>, y: Array<Base>) => T;
210-
>b12 : <T extends Derived2[]>(x: Base[], y: Base[]) => T
210+
>b12 : <T extends Derived2[]>(x: Array<Base>, y: Array<Base>) => T
211211
>x : Base[]
212212
>y : Base[]
213213

tests/baselines/reference/assignmentCompatWithConstructSignatures3.types

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,25 +74,25 @@ var a10: new (...x: Derived[]) => Derived;
7474
>x : Derived[]
7575

7676
var a11: new (x: { foo: string }, y: { foo: string; bar: string }) => Base;
77-
>a11 : new (x: { foo: string; }, y: { foo: string; bar: string; }) => Base
77+
>a11 : new (x: { foo: string;}, y: { foo: string; bar: string;}) => Base
7878
>x : { foo: string; }
7979
>foo : string
8080
>y : { foo: string; bar: string; }
8181
>foo : string
8282
>bar : string
8383

8484
var a12: new (x: Array<Base>, y: Array<Derived2>) => Array<Derived>;
85-
>a12 : new (x: Base[], y: Derived2[]) => Derived[]
85+
>a12 : new (x: Array<Base>, y: Array<Derived2>) => Array<Derived>
8686
>x : Base[]
8787
>y : Derived2[]
8888

8989
var a13: new (x: Array<Base>, y: Array<Derived>) => Array<Derived>;
90-
>a13 : new (x: Base[], y: Derived[]) => Derived[]
90+
>a13 : new (x: Array<Base>, y: Array<Derived>) => Array<Derived>
9191
>x : Base[]
9292
>y : Derived[]
9393

9494
var a14: new (x: { a: string; b: number }) => Object;
95-
>a14 : new (x: { a: string; b: number; }) => Object
95+
>a14 : new (x: { a: string; b: number;}) => Object
9696
>x : { a: string; b: number; }
9797
>a : string
9898
>b : number
@@ -274,10 +274,10 @@ b8 = a8; // ok
274274
>a8 : new (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived
275275

276276
var b9: new <T extends Base, U extends Derived>(x: (arg: T) => U, y: (arg2: { foo: string; bing: number }) => U) => (r: T) => U;
277-
>b9 : new <T extends Base, U extends Derived>(x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U
277+
>b9 : new <T extends Base, U extends Derived>(x: (arg: T) => U, y: (arg2: { foo: string; bing: number;}) => U) => (r: T) => U
278278
>x : (arg: T) => U
279279
>arg : T
280-
>y : (arg2: { foo: string; bing: number; }) => U
280+
>y : (arg2: { foo: string; bing: number;}) => U
281281
>arg2 : { foo: string; bing: number; }
282282
>foo : string
283283
>bing : number
@@ -323,7 +323,7 @@ b11 = a11; // ok
323323
>a11 : new (x: { foo: string; }, y: { foo: string; bar: string; }) => Base
324324

325325
var b12: new <T extends Array<Base>>(x: Array<Base>, y: T) => Array<Derived>;
326-
>b12 : new <T extends Base[]>(x: Base[], y: T) => Derived[]
326+
>b12 : new <T extends Base[]>(x: Array<Base>, y: T) => Array<Derived>
327327
>x : Base[]
328328
>y : T
329329

@@ -338,7 +338,7 @@ b12 = a12; // ok
338338
>a12 : new (x: Base[], y: Derived2[]) => Derived[]
339339

340340
var b13: new <T extends Array<Derived>>(x: Array<Base>, y: T) => T;
341-
>b13 : new <T extends Derived[]>(x: Base[], y: T) => T
341+
>b13 : new <T extends Derived[]>(x: Array<Base>, y: T) => T
342342
>x : Base[]
343343
>y : T
344344

0 commit comments

Comments
 (0)