1
1
/// <reference path='fourslash.ts'/>
2
2
3
- ////declare function f<T = boolean, U = string>(x: T, y: U): T;
4
- ////f<number, string>(/*1*/);
5
- ////f(/*2*/);
6
- ////f<number>(/*3*/);
7
- ////f<number, string, boolean>(/*4*/);
3
+ //// declare function f<T = boolean, U = string>(x: T, y: U): T;
4
+ //// f<number, string>(/*1*/);
5
+ //// f(/*2*/);
6
+ //// f<number>(/*3*/);
7
+ //// f<number, string, boolean>(/*4*/);
8
+
9
+ //// interface A { a: number }
10
+ //// interface B extends A { b: string }
11
+ //// declare function g<T, U, V extends A = B>(x: T, y: U, z: V): T;
12
+ //// declare function h<T, U, V extends A>(x: T, y: U, z: V): T;
13
+ //// declare function j<T, U, V = B>(x: T, y: U, z: V): T;
14
+ //// g(/*5*/);
15
+ //// h(/*6*/);
16
+ //// j(/*7*/);
17
+ //// g<number>(/*8*/);
18
+ //// h<number>(/*9*/);
19
+ //// j<number>(/*10*/);
8
20
9
21
verify . signatureHelp (
10
22
{ marker : "1" , text : "f(x: number, y: string): number" } ,
@@ -13,4 +25,13 @@ verify.signatureHelp(
13
25
{ marker : "3" , text : "f(x: number, y: string): number" } ,
14
26
// too many -- ignore extra type arguments
15
27
{ marker : "4" , text : "f(x: number, y: string): number" } ,
28
+
29
+ // not matched signature and no type arguments
30
+ { marker : "5" , text : "g(x: unknown, y: unknown, z: B): unknown" } ,
31
+ { marker : "6" , text : "h(x: unknown, y: unknown, z: A): unknown" } ,
32
+ { marker : "7" , text : "j(x: unknown, y: unknown, z: B): unknown" } ,
33
+ // not matched signature and too few type arguments
34
+ { marker : "8" , text : "g(x: number, y: unknown, z: B): number" } ,
35
+ { marker : "9" , text : "h(x: number, y: unknown, z: A): number" } ,
36
+ { marker : "10" , text : "j(x: number, y: unknown, z: B): number" } ,
16
37
) ;
0 commit comments