Skip to content

Commit e2c89af

Browse files
authored
use default type parameter rather than unknown when show quick help (microsoft#46792)
* use default type parameter rather than `unknown` when show quick help * prefer default type parameter than constraint for quick info
1 parent 9218255 commit e2c89af

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

src/compiler/checker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -30263,7 +30263,7 @@ namespace ts {
3026330263
typeArguments.pop();
3026430264
}
3026530265
while (typeArguments.length < typeParameters.length) {
30266-
typeArguments.push(getConstraintOfTypeParameter(typeParameters[typeArguments.length]) || getDefaultTypeArgumentType(isJs));
30266+
typeArguments.push(getDefaultFromTypeParameter(typeParameters[typeArguments.length]) || getConstraintOfTypeParameter(typeParameters[typeArguments.length]) || getDefaultTypeArgumentType(isJs));
3026730267
}
3026830268
return typeArguments;
3026930269
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,37 @@
11
/// <reference path='fourslash.ts'/>
22

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*/);
820

921
verify.signatureHelp(
1022
{ marker: "1", text: "f(x: number, y: string): number" },
1123
{ marker: "2", text: "f(x: boolean, y: string): boolean" },
12-
// too few -- fill in rest with unknown
13-
{ marker: "3", text: "f(x: number, y: unknown): number" },
24+
// too few -- fill in rest with default
25+
{ marker: "3", text: "f(x: number, y: string): number" },
1426
// too many -- ignore extra type arguments
1527
{ 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" },
1637
);

0 commit comments

Comments
 (0)