Add tests for type parameter fixing
This commit is contained in:
parent
f5ca456325
commit
263c54edd4
12
tests/baselines/reference/fixingTypeParametersRepeatedly1.js
Normal file
12
tests/baselines/reference/fixingTypeParametersRepeatedly1.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
//// [fixingTypeParametersRepeatedly1.ts]
|
||||
declare function f<T>(x: T, y: (p: T) => T, z: (p: T) => T): T;
|
||||
f("", x => null, x => x.toLowerCase());
|
||||
|
||||
// First overload of g should type check just like f
|
||||
declare function g<T>(x: T, y: (p: T) => T, z: (p: T) => T): T;
|
||||
declare function g();
|
||||
g("", x => null, x => x.toLowerCase());
|
||||
|
||||
//// [fixingTypeParametersRepeatedly1.js]
|
||||
f("", function (x) { return null; }, function (x) { return x.toLowerCase(); });
|
||||
g("", function (x) { return null; }, function (x) { return x.toLowerCase(); });
|
|
@ -0,0 +1,51 @@
|
|||
=== tests/cases/compiler/fixingTypeParametersRepeatedly1.ts ===
|
||||
declare function f<T>(x: T, y: (p: T) => T, z: (p: T) => T): T;
|
||||
>f : Symbol(f, Decl(fixingTypeParametersRepeatedly1.ts, 0, 0))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 0, 19))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly1.ts, 0, 22))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 0, 19))
|
||||
>y : Symbol(y, Decl(fixingTypeParametersRepeatedly1.ts, 0, 27))
|
||||
>p : Symbol(p, Decl(fixingTypeParametersRepeatedly1.ts, 0, 32))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 0, 19))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 0, 19))
|
||||
>z : Symbol(z, Decl(fixingTypeParametersRepeatedly1.ts, 0, 43))
|
||||
>p : Symbol(p, Decl(fixingTypeParametersRepeatedly1.ts, 0, 48))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 0, 19))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 0, 19))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 0, 19))
|
||||
|
||||
f("", x => null, x => x.toLowerCase());
|
||||
>f : Symbol(f, Decl(fixingTypeParametersRepeatedly1.ts, 0, 0))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly1.ts, 1, 5))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly1.ts, 1, 16))
|
||||
>x.toLowerCase : Symbol(String.toLowerCase, Decl(lib.d.ts, 399, 51))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly1.ts, 1, 16))
|
||||
>toLowerCase : Symbol(String.toLowerCase, Decl(lib.d.ts, 399, 51))
|
||||
|
||||
// First overload of g should type check just like f
|
||||
declare function g<T>(x: T, y: (p: T) => T, z: (p: T) => T): T;
|
||||
>g : Symbol(g, Decl(fixingTypeParametersRepeatedly1.ts, 1, 39), Decl(fixingTypeParametersRepeatedly1.ts, 4, 63))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 4, 19))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly1.ts, 4, 22))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 4, 19))
|
||||
>y : Symbol(y, Decl(fixingTypeParametersRepeatedly1.ts, 4, 27))
|
||||
>p : Symbol(p, Decl(fixingTypeParametersRepeatedly1.ts, 4, 32))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 4, 19))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 4, 19))
|
||||
>z : Symbol(z, Decl(fixingTypeParametersRepeatedly1.ts, 4, 43))
|
||||
>p : Symbol(p, Decl(fixingTypeParametersRepeatedly1.ts, 4, 48))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 4, 19))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 4, 19))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly1.ts, 4, 19))
|
||||
|
||||
declare function g();
|
||||
>g : Symbol(g, Decl(fixingTypeParametersRepeatedly1.ts, 1, 39), Decl(fixingTypeParametersRepeatedly1.ts, 4, 63))
|
||||
|
||||
g("", x => null, x => x.toLowerCase());
|
||||
>g : Symbol(g, Decl(fixingTypeParametersRepeatedly1.ts, 1, 39), Decl(fixingTypeParametersRepeatedly1.ts, 4, 63))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly1.ts, 6, 5))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly1.ts, 6, 16))
|
||||
>x.toLowerCase : Symbol(String.toLowerCase, Decl(lib.d.ts, 399, 51))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly1.ts, 6, 16))
|
||||
>toLowerCase : Symbol(String.toLowerCase, Decl(lib.d.ts, 399, 51))
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
=== tests/cases/compiler/fixingTypeParametersRepeatedly1.ts ===
|
||||
declare function f<T>(x: T, y: (p: T) => T, z: (p: T) => T): T;
|
||||
>f : <T>(x: T, y: (p: T) => T, z: (p: T) => T) => T
|
||||
>T : T
|
||||
>x : T
|
||||
>T : T
|
||||
>y : (p: T) => T
|
||||
>p : T
|
||||
>T : T
|
||||
>T : T
|
||||
>z : (p: T) => T
|
||||
>p : T
|
||||
>T : T
|
||||
>T : T
|
||||
>T : T
|
||||
|
||||
f("", x => null, x => x.toLowerCase());
|
||||
>f("", x => null, x => x.toLowerCase()) : string
|
||||
>f : <T>(x: T, y: (p: T) => T, z: (p: T) => T) => T
|
||||
>"" : string
|
||||
>x => null : (x: string) => any
|
||||
>x : string
|
||||
>null : null
|
||||
>x => x.toLowerCase() : (x: string) => string
|
||||
>x : string
|
||||
>x.toLowerCase() : string
|
||||
>x.toLowerCase : () => string
|
||||
>x : string
|
||||
>toLowerCase : () => string
|
||||
|
||||
// First overload of g should type check just like f
|
||||
declare function g<T>(x: T, y: (p: T) => T, z: (p: T) => T): T;
|
||||
>g : { <T>(x: T, y: (p: T) => T, z: (p: T) => T): T; (): any; }
|
||||
>T : T
|
||||
>x : T
|
||||
>T : T
|
||||
>y : (p: T) => T
|
||||
>p : T
|
||||
>T : T
|
||||
>T : T
|
||||
>z : (p: T) => T
|
||||
>p : T
|
||||
>T : T
|
||||
>T : T
|
||||
>T : T
|
||||
|
||||
declare function g();
|
||||
>g : { <T>(x: T, y: (p: T) => T, z: (p: T) => T): T; (): any; }
|
||||
|
||||
g("", x => null, x => x.toLowerCase());
|
||||
>g("", x => null, x => x.toLowerCase()) : string
|
||||
>g : { <T>(x: T, y: (p: T) => T, z: (p: T) => T): T; (): any; }
|
||||
>"" : string
|
||||
>x => null : (x: string) => any
|
||||
>x : string
|
||||
>null : null
|
||||
>x => x.toLowerCase() : (x: string) => string
|
||||
>x : string
|
||||
>x.toLowerCase() : string
|
||||
>x.toLowerCase : () => string
|
||||
>x : string
|
||||
>toLowerCase : () => string
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
tests/cases/compiler/fixingTypeParametersRepeatedly2.ts(11,27): error TS2345: Argument of type '(d: Derived) => Base' is not assignable to parameter of type '(p: Derived) => Derived'.
|
||||
Type 'Base' is not assignable to type 'Derived'.
|
||||
Property 'toBase' is missing in type 'Base'.
|
||||
tests/cases/compiler/fixingTypeParametersRepeatedly2.ts(17,27): error TS2345: Argument of type '(d: Derived) => Base' is not assignable to parameter of type '(p: Derived) => Derived'.
|
||||
Type 'Base' is not assignable to type 'Derived'.
|
||||
|
||||
|
||||
==== tests/cases/compiler/fixingTypeParametersRepeatedly2.ts (2 errors) ====
|
||||
interface Base {
|
||||
baseProp;
|
||||
}
|
||||
interface Derived extends Base {
|
||||
toBase(): Base;
|
||||
}
|
||||
|
||||
var derived: Derived;
|
||||
|
||||
declare function foo<T>(x: T, func: (p: T) => T): T;
|
||||
var result = foo(derived, d => d.toBase());
|
||||
~~~~~~~~~~~~~~~
|
||||
!!! error TS2345: Argument of type '(d: Derived) => Base' is not assignable to parameter of type '(p: Derived) => Derived'.
|
||||
!!! error TS2345: Type 'Base' is not assignable to type 'Derived'.
|
||||
!!! error TS2345: Property 'toBase' is missing in type 'Base'.
|
||||
|
||||
// bar should type check just like foo.
|
||||
// The same error should be observed in both cases.
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
var result = bar(derived, d => d.toBase());
|
||||
~~~~~~~~~~~~~~~
|
||||
!!! error TS2345: Argument of type '(d: Derived) => Base' is not assignable to parameter of type '(p: Derived) => Derived'.
|
||||
!!! error TS2345: Type 'Base' is not assignable to type 'Derived'.
|
23
tests/baselines/reference/fixingTypeParametersRepeatedly2.js
Normal file
23
tests/baselines/reference/fixingTypeParametersRepeatedly2.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
//// [fixingTypeParametersRepeatedly2.ts]
|
||||
interface Base {
|
||||
baseProp;
|
||||
}
|
||||
interface Derived extends Base {
|
||||
toBase(): Base;
|
||||
}
|
||||
|
||||
var derived: Derived;
|
||||
|
||||
declare function foo<T>(x: T, func: (p: T) => T): T;
|
||||
var result = foo(derived, d => d.toBase());
|
||||
|
||||
// bar should type check just like foo.
|
||||
// The same error should be observed in both cases.
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
var result = bar(derived, d => d.toBase());
|
||||
|
||||
//// [fixingTypeParametersRepeatedly2.js]
|
||||
var derived;
|
||||
var result = foo(derived, function (d) { return d.toBase(); });
|
||||
var result = bar(derived, function (d) { return d.toBase(); });
|
23
tests/baselines/reference/fixingTypeParametersRepeatedly3.js
Normal file
23
tests/baselines/reference/fixingTypeParametersRepeatedly3.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
//// [fixingTypeParametersRepeatedly3.ts]
|
||||
interface Base {
|
||||
baseProp;
|
||||
}
|
||||
interface Derived extends Base {
|
||||
toBase?(): Base;
|
||||
}
|
||||
|
||||
var derived: Derived;
|
||||
|
||||
declare function foo<T>(x: T, func: (p: T) => T): T;
|
||||
var result = foo(derived, d => d.toBase());
|
||||
|
||||
// bar should type check just like foo.
|
||||
// result2 should have the same type as result
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
var result2 = bar(derived, d => d.toBase());
|
||||
|
||||
//// [fixingTypeParametersRepeatedly3.js]
|
||||
var derived;
|
||||
var result = foo(derived, function (d) { return d.toBase(); });
|
||||
var result2 = bar(derived, function (d) { return d.toBase(); });
|
|
@ -0,0 +1,73 @@
|
|||
=== tests/cases/compiler/fixingTypeParametersRepeatedly3.ts ===
|
||||
interface Base {
|
||||
>Base : Symbol(Base, Decl(fixingTypeParametersRepeatedly3.ts, 0, 0))
|
||||
|
||||
baseProp;
|
||||
>baseProp : Symbol(baseProp, Decl(fixingTypeParametersRepeatedly3.ts, 0, 16))
|
||||
}
|
||||
interface Derived extends Base {
|
||||
>Derived : Symbol(Derived, Decl(fixingTypeParametersRepeatedly3.ts, 2, 1))
|
||||
>Base : Symbol(Base, Decl(fixingTypeParametersRepeatedly3.ts, 0, 0))
|
||||
|
||||
toBase?(): Base;
|
||||
>toBase : Symbol(toBase, Decl(fixingTypeParametersRepeatedly3.ts, 3, 32))
|
||||
>Base : Symbol(Base, Decl(fixingTypeParametersRepeatedly3.ts, 0, 0))
|
||||
}
|
||||
|
||||
var derived: Derived;
|
||||
>derived : Symbol(derived, Decl(fixingTypeParametersRepeatedly3.ts, 7, 3))
|
||||
>Derived : Symbol(Derived, Decl(fixingTypeParametersRepeatedly3.ts, 2, 1))
|
||||
|
||||
declare function foo<T>(x: T, func: (p: T) => T): T;
|
||||
>foo : Symbol(foo, Decl(fixingTypeParametersRepeatedly3.ts, 7, 21))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 9, 21))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly3.ts, 9, 24))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 9, 21))
|
||||
>func : Symbol(func, Decl(fixingTypeParametersRepeatedly3.ts, 9, 29))
|
||||
>p : Symbol(p, Decl(fixingTypeParametersRepeatedly3.ts, 9, 37))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 9, 21))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 9, 21))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 9, 21))
|
||||
|
||||
var result = foo(derived, d => d.toBase());
|
||||
>result : Symbol(result, Decl(fixingTypeParametersRepeatedly3.ts, 10, 3))
|
||||
>foo : Symbol(foo, Decl(fixingTypeParametersRepeatedly3.ts, 7, 21))
|
||||
>derived : Symbol(derived, Decl(fixingTypeParametersRepeatedly3.ts, 7, 3))
|
||||
>d : Symbol(d, Decl(fixingTypeParametersRepeatedly3.ts, 10, 25))
|
||||
>d.toBase : Symbol(Derived.toBase, Decl(fixingTypeParametersRepeatedly3.ts, 3, 32))
|
||||
>d : Symbol(d, Decl(fixingTypeParametersRepeatedly3.ts, 10, 25))
|
||||
>toBase : Symbol(Derived.toBase, Decl(fixingTypeParametersRepeatedly3.ts, 3, 32))
|
||||
|
||||
// bar should type check just like foo.
|
||||
// result2 should have the same type as result
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
>bar : Symbol(bar, Decl(fixingTypeParametersRepeatedly3.ts, 10, 43), Decl(fixingTypeParametersRepeatedly3.ts, 14, 52))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 14, 21))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly3.ts, 14, 24))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 14, 21))
|
||||
>func : Symbol(func, Decl(fixingTypeParametersRepeatedly3.ts, 14, 29))
|
||||
>p : Symbol(p, Decl(fixingTypeParametersRepeatedly3.ts, 14, 37))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 14, 21))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 14, 21))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 14, 21))
|
||||
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
>bar : Symbol(bar, Decl(fixingTypeParametersRepeatedly3.ts, 10, 43), Decl(fixingTypeParametersRepeatedly3.ts, 14, 52))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 15, 21))
|
||||
>x : Symbol(x, Decl(fixingTypeParametersRepeatedly3.ts, 15, 24))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 15, 21))
|
||||
>func : Symbol(func, Decl(fixingTypeParametersRepeatedly3.ts, 15, 29))
|
||||
>p : Symbol(p, Decl(fixingTypeParametersRepeatedly3.ts, 15, 37))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 15, 21))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 15, 21))
|
||||
>T : Symbol(T, Decl(fixingTypeParametersRepeatedly3.ts, 15, 21))
|
||||
|
||||
var result2 = bar(derived, d => d.toBase());
|
||||
>result2 : Symbol(result2, Decl(fixingTypeParametersRepeatedly3.ts, 16, 3))
|
||||
>bar : Symbol(bar, Decl(fixingTypeParametersRepeatedly3.ts, 10, 43), Decl(fixingTypeParametersRepeatedly3.ts, 14, 52))
|
||||
>derived : Symbol(derived, Decl(fixingTypeParametersRepeatedly3.ts, 7, 3))
|
||||
>d : Symbol(d, Decl(fixingTypeParametersRepeatedly3.ts, 16, 26))
|
||||
>d.toBase : Symbol(Derived.toBase, Decl(fixingTypeParametersRepeatedly3.ts, 3, 32))
|
||||
>d : Symbol(d, Decl(fixingTypeParametersRepeatedly3.ts, 16, 26))
|
||||
>toBase : Symbol(Derived.toBase, Decl(fixingTypeParametersRepeatedly3.ts, 3, 32))
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
=== tests/cases/compiler/fixingTypeParametersRepeatedly3.ts ===
|
||||
interface Base {
|
||||
>Base : Base
|
||||
|
||||
baseProp;
|
||||
>baseProp : any
|
||||
}
|
||||
interface Derived extends Base {
|
||||
>Derived : Derived
|
||||
>Base : Base
|
||||
|
||||
toBase?(): Base;
|
||||
>toBase : () => Base
|
||||
>Base : Base
|
||||
}
|
||||
|
||||
var derived: Derived;
|
||||
>derived : Derived
|
||||
>Derived : Derived
|
||||
|
||||
declare function foo<T>(x: T, func: (p: T) => T): T;
|
||||
>foo : <T>(x: T, func: (p: T) => T) => T
|
||||
>T : T
|
||||
>x : T
|
||||
>T : T
|
||||
>func : (p: T) => T
|
||||
>p : T
|
||||
>T : T
|
||||
>T : T
|
||||
>T : T
|
||||
|
||||
var result = foo(derived, d => d.toBase());
|
||||
>result : Derived
|
||||
>foo(derived, d => d.toBase()) : Derived
|
||||
>foo : <T>(x: T, func: (p: T) => T) => T
|
||||
>derived : Derived
|
||||
>d => d.toBase() : (d: Derived) => Base
|
||||
>d : Derived
|
||||
>d.toBase() : Base
|
||||
>d.toBase : () => Base
|
||||
>d : Derived
|
||||
>toBase : () => Base
|
||||
|
||||
// bar should type check just like foo.
|
||||
// result2 should have the same type as result
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
>bar : { <T>(x: T, func: (p: T) => T): T; <T>(x: T, func: (p: T) => T): T; }
|
||||
>T : T
|
||||
>x : T
|
||||
>T : T
|
||||
>func : (p: T) => T
|
||||
>p : T
|
||||
>T : T
|
||||
>T : T
|
||||
>T : T
|
||||
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
>bar : { <T>(x: T, func: (p: T) => T): T; <T>(x: T, func: (p: T) => T): T; }
|
||||
>T : T
|
||||
>x : T
|
||||
>T : T
|
||||
>func : (p: T) => T
|
||||
>p : T
|
||||
>T : T
|
||||
>T : T
|
||||
>T : T
|
||||
|
||||
var result2 = bar(derived, d => d.toBase());
|
||||
>result2 : Derived
|
||||
>bar(derived, d => d.toBase()) : Derived
|
||||
>bar : { <T>(x: T, func: (p: T) => T): T; <T>(x: T, func: (p: T) => T): T; }
|
||||
>derived : Derived
|
||||
>d => d.toBase() : (d: Derived) => Base
|
||||
>d : Derived
|
||||
>d.toBase() : Base
|
||||
>d.toBase : () => Base
|
||||
>d : Derived
|
||||
>toBase : () => Base
|
||||
|
7
tests/cases/compiler/fixingTypeParametersRepeatedly1.ts
Normal file
7
tests/cases/compiler/fixingTypeParametersRepeatedly1.ts
Normal file
|
@ -0,0 +1,7 @@
|
|||
declare function f<T>(x: T, y: (p: T) => T, z: (p: T) => T): T;
|
||||
f("", x => null, x => x.toLowerCase());
|
||||
|
||||
// First overload of g should type check just like f
|
||||
declare function g<T>(x: T, y: (p: T) => T, z: (p: T) => T): T;
|
||||
declare function g();
|
||||
g("", x => null, x => x.toLowerCase());
|
17
tests/cases/compiler/fixingTypeParametersRepeatedly2.ts
Normal file
17
tests/cases/compiler/fixingTypeParametersRepeatedly2.ts
Normal file
|
@ -0,0 +1,17 @@
|
|||
interface Base {
|
||||
baseProp;
|
||||
}
|
||||
interface Derived extends Base {
|
||||
toBase(): Base;
|
||||
}
|
||||
|
||||
var derived: Derived;
|
||||
|
||||
declare function foo<T>(x: T, func: (p: T) => T): T;
|
||||
var result = foo(derived, d => d.toBase());
|
||||
|
||||
// bar should type check just like foo.
|
||||
// The same error should be observed in both cases.
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
var result = bar(derived, d => d.toBase());
|
17
tests/cases/compiler/fixingTypeParametersRepeatedly3.ts
Normal file
17
tests/cases/compiler/fixingTypeParametersRepeatedly3.ts
Normal file
|
@ -0,0 +1,17 @@
|
|||
interface Base {
|
||||
baseProp;
|
||||
}
|
||||
interface Derived extends Base {
|
||||
toBase?(): Base;
|
||||
}
|
||||
|
||||
var derived: Derived;
|
||||
|
||||
declare function foo<T>(x: T, func: (p: T) => T): T;
|
||||
var result = foo(derived, d => d.toBase());
|
||||
|
||||
// bar should type check just like foo.
|
||||
// result2 should have the same type as result
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
declare function bar<T>(x: T, func: (p: T) => T): T;
|
||||
var result2 = bar(derived, d => d.toBase());
|
13
tests/cases/fourslash/fixingTypeParametersQuickInfo.ts
Normal file
13
tests/cases/fourslash/fixingTypeParametersQuickInfo.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
/// <reference path='fourslash.ts'/>
|
||||
|
||||
////declare function f<T>(x: T, y: (p: T) => T, z: (p: T) => T): T;
|
||||
////var /*1*/result = /*2*/f(0, /*3*/x => null, /*4*/x => x.blahblah);
|
||||
|
||||
goTo.marker('1');
|
||||
verify.quickInfoIs('var result: number');
|
||||
goTo.marker('2');
|
||||
verify.quickInfoIs('function f<number>(x: number, y: (p: number) => number, z: (p: number) => number): number');
|
||||
goTo.marker('3');
|
||||
verify.quickInfoIs('(parameter) x: number');
|
||||
goTo.marker('4');
|
||||
verify.quickInfoIs('(parameter) x: number');
|
Loading…
Reference in a new issue