|
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" },
|
11 | 23 | { 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" }, |
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