Skip to content

Commit cdb4e6e

Browse files
committed
Use the wildcard type for signature erasure
1 parent a09a714 commit cdb4e6e

10 files changed

+78
-14
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14949,7 +14949,7 @@ namespace ts {
1494914949
}
1495014950

1495114951
function createTypeEraser(sources: readonly TypeParameter[]): TypeMapper {
14952-
return createTypeMapper(sources, /*targets*/ undefined);
14952+
return createTypeMapper(sources, map(sources, () => wildcardType));
1495314953
}
1495414954

1495514955
/**

tests/baselines/reference/complexRecursiveCollections.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1137,7 +1137,7 @@ declare module Immutable {
11371137
>Seq : typeof Seq
11381138

11391139
function isSeq(maybeSeq: any): maybeSeq is Seq.Indexed<any> | Seq.Keyed<any, any>;
1140-
>isSeq : (maybeSeq: any) => maybeSeq is Indexed<any> | Keyed<any, any>
1140+
>isSeq : (maybeSeq: any) => maybeSeq is Keyed<any, any> | Indexed<any>
11411141
>maybeSeq : any
11421142
>Seq : any
11431143
>Seq : any
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//// [overloadAssignabilityChecksAllowGenericAssignment.ts]
2+
declare function provide<T>(cb: (x: T) => void): void;
3+
declare function provide<T>(cb: (x: T[keyof T]) => void): void;
4+
5+
declare function provider<T>(provide: (cb: (x: T) => void) => void): void;
6+
provider(provide);
7+
8+
//// [overloadAssignabilityChecksAllowGenericAssignment.js]
9+
provider(provide);
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
=== tests/cases/compiler/overloadAssignabilityChecksAllowGenericAssignment.ts ===
2+
declare function provide<T>(cb: (x: T) => void): void;
3+
>provide : Symbol(provide, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 0, 0), Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 0, 54))
4+
>T : Symbol(T, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 0, 25))
5+
>cb : Symbol(cb, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 0, 28))
6+
>x : Symbol(x, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 0, 33))
7+
>T : Symbol(T, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 0, 25))
8+
9+
declare function provide<T>(cb: (x: T[keyof T]) => void): void;
10+
>provide : Symbol(provide, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 0, 0), Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 0, 54))
11+
>T : Symbol(T, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 1, 25))
12+
>cb : Symbol(cb, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 1, 28))
13+
>x : Symbol(x, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 1, 33))
14+
>T : Symbol(T, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 1, 25))
15+
>T : Symbol(T, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 1, 25))
16+
17+
declare function provider<T>(provide: (cb: (x: T) => void) => void): void;
18+
>provider : Symbol(provider, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 1, 63))
19+
>T : Symbol(T, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 3, 26))
20+
>provide : Symbol(provide, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 3, 29))
21+
>cb : Symbol(cb, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 3, 39))
22+
>x : Symbol(x, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 3, 44))
23+
>T : Symbol(T, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 3, 26))
24+
25+
provider(provide);
26+
>provider : Symbol(provider, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 1, 63))
27+
>provide : Symbol(provide, Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 0, 0), Decl(overloadAssignabilityChecksAllowGenericAssignment.ts, 0, 54))
28+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
=== tests/cases/compiler/overloadAssignabilityChecksAllowGenericAssignment.ts ===
2+
declare function provide<T>(cb: (x: T) => void): void;
3+
>provide : { <T>(cb: (x: T) => void): void; <T>(cb: (x: T[keyof T]) => void): void; }
4+
>cb : (x: T) => void
5+
>x : T
6+
7+
declare function provide<T>(cb: (x: T[keyof T]) => void): void;
8+
>provide : { <T>(cb: (x: T) => void): void; <T>(cb: (x: T[keyof T]) => void): void; }
9+
>cb : (x: T[keyof T]) => void
10+
>x : T[keyof T]
11+
12+
declare function provider<T>(provide: (cb: (x: T) => void) => void): void;
13+
>provider : <T>(provide: (cb: (x: T) => void) => void) => void
14+
>provide : (cb: (x: T) => void) => void
15+
>cb : (x: T) => void
16+
>x : T
17+
18+
provider(provide);
19+
>provider(provide) : void
20+
>provider : <T>(provide: (cb: (x: T) => void) => void) => void
21+
>provide : { <T>(cb: (x: T) => void): void; <T>(cb: (x: T[keyof T]) => void): void; }
22+

tests/baselines/reference/subtypingWithCallSignatures2.types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -762,8 +762,8 @@ var r15arg1 = <T>(x: T) => <T[]>null
762762
>null : null
763763

764764
var r15 = foo15(r15arg1); // any
765-
>r15 : any
766-
>foo15(r15arg1) : any
765+
>r15 : { (x: number): number[]; (x: string): string[]; }
766+
>foo15(r15arg1) : { (x: number): number[]; (x: string): string[]; }
767767
>foo15 : { (a: { (x: number): number[]; (x: string): string[]; }): { (x: number): number[]; (x: string): string[]; }; (a: any): any; }
768768
>r15arg1 : <T>(x: T) => T[]
769769

@@ -789,8 +789,8 @@ var r17arg1 = <T>(x: (a: T) => T) => <T[]>null;
789789
>null : null
790790

791791
var r17 = foo17(r17arg1); // any
792-
>r17 : any
793-
>foo17(r17arg1) : any
792+
>r17 : { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; }
793+
>foo17(r17arg1) : { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; }
794794
>foo17 : { (a: { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; }): { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; }; (a: any): any; }
795795
>r17arg1 : <T>(x: (a: T) => T) => T[]
796796

tests/baselines/reference/subtypingWithCallSignatures3.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,8 @@ module Errors {
457457
>null : null
458458

459459
var r8 = foo16(r8arg); // any
460-
>r8 : any
461-
>foo16(r8arg) : any
460+
>r8 : { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; }
461+
>foo16(r8arg) : { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; }
462462
>foo16 : { (a2: { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; }): { (x: { (a: number): number; (a?: number): number; }): number[]; (x: { (a: boolean): boolean; (a?: boolean): boolean; }): boolean[]; }; (a2: any): any; }
463463
>r8arg : <T>(x: (a: T) => T) => T[]
464464

tests/baselines/reference/subtypingWithConstructSignatures2.types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -675,8 +675,8 @@ var r15arg1: new <T>(x: T) => T[];
675675
>x : T
676676

677677
var r15 = foo15(r15arg1); // any
678-
>r15 : any
679-
>foo15(r15arg1) : any
678+
>r15 : { new (x: number): number[]; new (x: string): string[]; }
679+
>foo15(r15arg1) : { new (x: number): number[]; new (x: string): string[]; }
680680
>foo15 : { (a: { new (x: number): number[]; new (x: string): string[]; }): { new (x: number): number[]; new (x: string): string[]; }; (a: any): any; }
681681
>r15arg1 : new <T>(x: T) => T[]
682682

@@ -696,8 +696,8 @@ var r17arg1: new <T>(x: (a: T) => T) => T[];
696696
>a : T
697697

698698
var r17 = foo17(r17arg1); // any
699-
>r17 : any
700-
>foo17(r17arg1) : any
699+
>r17 : { new (x: (a: number) => number): number[]; new (x: (a: string) => string): string[]; }
700+
>foo17(r17arg1) : { new (x: (a: number) => number): number[]; new (x: (a: string) => string): string[]; }
701701
>foo17 : { (a: { new (x: (a: number) => number): number[]; new (x: (a: string) => string): string[]; }): { new (x: (a: number) => number): number[]; new (x: (a: string) => string): string[]; }; (a: any): any; }
702702
>r17arg1 : new <T>(x: (a: T) => T) => T[]
703703

tests/baselines/reference/subtypingWithConstructSignatures3.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,8 @@ module Errors {
406406
>a : T
407407

408408
var r8 = foo16(r8arg); // any
409-
>r8 : any
410-
>foo16(r8arg) : any
409+
>r8 : { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[]; }
410+
>foo16(r8arg) : { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[]; }
411411
>foo16 : { (a2: { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[]; }): { new (x: { new (a: number): number; new (a?: number): number; }): number[]; new (x: { new (a: boolean): boolean; new (a?: boolean): boolean; }): boolean[]; }; (a2: any): any; }
412412
>r8arg : new <T>(x: new (a: T) => T) => T[]
413413

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
declare function provide<T>(cb: (x: T) => void): void;
2+
declare function provide<T>(cb: (x: T[keyof T]) => void): void;
3+
4+
declare function provider<T>(provide: (cb: (x: T) => void) => void): void;
5+
provider(provide);

0 commit comments

Comments
 (0)