Merge pull request #19056 from Microsoft/fix16221

Fix recursive reference in type parameter default
This commit is contained in:
Ron Buckton
2017-10-11 12:49:35 -07:00
committed by GitHub
11 changed files with 98 additions and 22 deletions

View File

@@ -487,7 +487,10 @@ const t03c00 = (<t03<number>>x).a;
const t03c01 = (<t03<1>>x).a;
const t03c02 = (<t03<number, number>>x).a;
const t03c03 = (<t03<1, 1>>x).a;
const t03c04 = (<t03<number, 1>>x).a;
const t03c04 = (<t03<number, 1>>x).a;
// https://github.com/Microsoft/TypeScript/issues/16221
interface SelfReference<T = SelfReference<string>> {}
//// [genericDefaults.js]
// no inference
@@ -1024,3 +1027,5 @@ declare const t03c01: [1, 1];
declare const t03c02: [number, number];
declare const t03c03: [1, 1];
declare const t03c04: [number, 1];
interface SelfReference<T = SelfReference<string>> {
}

View File

@@ -2291,3 +2291,9 @@ const t03c04 = (<t03<number, 1>>x).a;
>x : Symbol(x, Decl(genericDefaults.ts, 13, 13))
>a : Symbol(a, Decl(genericDefaults.ts, 483, 47))
// https://github.com/Microsoft/TypeScript/issues/16221
interface SelfReference<T = SelfReference<string>> {}
>SelfReference : Symbol(SelfReference, Decl(genericDefaults.ts, 488, 37))
>T : Symbol(T, Decl(genericDefaults.ts, 491, 24))
>SelfReference : Symbol(SelfReference, Decl(genericDefaults.ts, 488, 37))

View File

@@ -2643,3 +2643,9 @@ const t03c04 = (<t03<number, 1>>x).a;
>x : any
>a : [number, 1]
// https://github.com/Microsoft/TypeScript/issues/16221
interface SelfReference<T = SelfReference<string>> {}
>SelfReference : SelfReference<T>
>T : T
>SelfReference : SelfReference<T>

View File

@@ -21,9 +21,10 @@ tests/cases/compiler/genericDefaultsErrors.ts(33,15): error TS2707: Generic type
tests/cases/compiler/genericDefaultsErrors.ts(36,15): error TS2707: Generic type 'i09<T, U, V>' requires between 2 and 3 type arguments.
tests/cases/compiler/genericDefaultsErrors.ts(38,20): error TS2304: Cannot find name 'T'.
tests/cases/compiler/genericDefaultsErrors.ts(38,20): error TS4033: Property 'x' of exported interface has or is using private name 'T'.
tests/cases/compiler/genericDefaultsErrors.ts(42,29): error TS2716: Type parameter 'T' has a circular default.
==== tests/cases/compiler/genericDefaultsErrors.ts (21 errors) ====
==== tests/cases/compiler/genericDefaultsErrors.ts (22 errors) ====
declare const x: any;
declare function f03<T extends string = number>(): void; // error
@@ -106,4 +107,9 @@ tests/cases/compiler/genericDefaultsErrors.ts(38,20): error TS4033: Property 'x'
!!! error TS2304: Cannot find name 'T'.
~
!!! error TS4033: Property 'x' of exported interface has or is using private name 'T'.
interface i10<T = number> {}
interface i10<T = number> {}
// https://github.com/Microsoft/TypeScript/issues/16221
interface SelfReference<T = SelfReference> {}
~~~~~~~~~~~~~
!!! error TS2716: Type parameter 'T' has a circular default.

View File

@@ -37,7 +37,10 @@ type i09t03 = i09<1, 2, 3>; // ok
type i09t04 = i09<1, 2, 3, 4>; // error
interface i10 { x: T; } // error
interface i10<T = number> {}
interface i10<T = number> {}
// https://github.com/Microsoft/TypeScript/issues/16221
interface SelfReference<T = SelfReference> {}
//// [genericDefaultsErrors.js]
f11(); // ok

View File

@@ -136,3 +136,9 @@ interface i10<T = number> {}
>i10 : Symbol(i10, Decl(genericDefaultsErrors.ts, 35, 30), Decl(genericDefaultsErrors.ts, 37, 23))
>T : Symbol(T, Decl(genericDefaultsErrors.ts, 38, 14))
// https://github.com/Microsoft/TypeScript/issues/16221
interface SelfReference<T = SelfReference> {}
>SelfReference : Symbol(SelfReference, Decl(genericDefaultsErrors.ts, 38, 28))
>T : Symbol(T, Decl(genericDefaultsErrors.ts, 41, 24))
>SelfReference : Symbol(SelfReference, Decl(genericDefaultsErrors.ts, 38, 28))

View File

@@ -145,3 +145,9 @@ interface i10<T = number> {}
>i10 : i10<T>
>T : T
// https://github.com/Microsoft/TypeScript/issues/16221
interface SelfReference<T = SelfReference> {}
>SelfReference : SelfReference<T>
>T : T
>SelfReference : SelfReference<T>

View File

@@ -487,4 +487,7 @@ const t03c00 = (<t03<number>>x).a;
const t03c01 = (<t03<1>>x).a;
const t03c02 = (<t03<number, number>>x).a;
const t03c03 = (<t03<1, 1>>x).a;
const t03c04 = (<t03<number, 1>>x).a;
const t03c04 = (<t03<number, 1>>x).a;
// https://github.com/Microsoft/TypeScript/issues/16221
interface SelfReference<T = SelfReference<string>> {}

View File

@@ -38,4 +38,7 @@ type i09t03 = i09<1, 2, 3>; // ok
type i09t04 = i09<1, 2, 3, 4>; // error
interface i10 { x: T; } // error
interface i10<T = number> {}
interface i10<T = number> {}
// https://github.com/Microsoft/TypeScript/issues/16221
interface SelfReference<T = SelfReference> {}