Skip to content

Commit da83eb9

Browse files
committed
Returned generic function is instantiated correctly
1 parent 1b585dd commit da83eb9

File tree

3 files changed

+101
-0
lines changed

3 files changed

+101
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
=== tests/cases/conformance/jsdoc/jsdocTemplateTag.ts ===
2+
/**
3+
* @param {T} a
4+
* @template T
5+
*/
6+
function f<T>(a: T) {
7+
>f : Symbol(f, Decl(jsdocTemplateTag.ts, 0, 0))
8+
>T : Symbol(T, Decl(jsdocTemplateTag.ts, 4, 11))
9+
>a : Symbol(a, Decl(jsdocTemplateTag.ts, 4, 14))
10+
>T : Symbol(T, Decl(jsdocTemplateTag.ts, 4, 11))
11+
12+
return () => a
13+
>a : Symbol(a, Decl(jsdocTemplateTag.ts, 4, 14))
14+
}
15+
let n = f(1)()
16+
>n : Symbol(n, Decl(jsdocTemplateTag.ts, 7, 3))
17+
>f : Symbol(f, Decl(jsdocTemplateTag.ts, 0, 0))
18+
19+
/**
20+
* @param {T} a
21+
* @template T
22+
* @returns {function(): T}
23+
*/
24+
function g<T>(a: T) {
25+
>g : Symbol(g, Decl(jsdocTemplateTag.ts, 7, 14))
26+
>T : Symbol(T, Decl(jsdocTemplateTag.ts, 14, 11))
27+
>a : Symbol(a, Decl(jsdocTemplateTag.ts, 14, 14))
28+
>T : Symbol(T, Decl(jsdocTemplateTag.ts, 14, 11))
29+
30+
return () => a
31+
>a : Symbol(a, Decl(jsdocTemplateTag.ts, 14, 14))
32+
}
33+
let s = g('hi')()
34+
>s : Symbol(s, Decl(jsdocTemplateTag.ts, 17, 3))
35+
>g : Symbol(g, Decl(jsdocTemplateTag.ts, 7, 14))
36+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
=== tests/cases/conformance/jsdoc/jsdocTemplateTag.ts ===
2+
/**
3+
* @param {T} a
4+
* @template T
5+
*/
6+
function f<T>(a: T) {
7+
>f : <T>(a: T) => () => T
8+
>T : T
9+
>a : T
10+
>T : T
11+
12+
return () => a
13+
>() => a : () => T
14+
>a : T
15+
}
16+
let n = f(1)()
17+
>n : number
18+
>f(1)() : number
19+
>f(1) : () => number
20+
>f : <T>(a: T) => () => T
21+
>1 : 1
22+
23+
/**
24+
* @param {T} a
25+
* @template T
26+
* @returns {function(): T}
27+
*/
28+
function g<T>(a: T) {
29+
>g : <T>(a: T) => () => T
30+
>T : T
31+
>a : T
32+
>T : T
33+
34+
return () => a
35+
>() => a : () => T
36+
>a : T
37+
}
38+
let s = g('hi')()
39+
>s : string
40+
>g('hi')() : string
41+
>g('hi') : () => string
42+
>g : <T>(a: T) => () => T
43+
>'hi' : "hi"
44+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// @allowJs: true
2+
// @checkJs: true
3+
// @noEmit: true
4+
/**
5+
* @param {T} a
6+
* @template T
7+
*/
8+
function f<T>(a: T) {
9+
return () => a
10+
}
11+
let n = f(1)()
12+
13+
/**
14+
* @param {T} a
15+
* @template T
16+
* @returns {function(): T}
17+
*/
18+
function g<T>(a: T) {
19+
return () => a
20+
}
21+
let s = g('hi')()

0 commit comments

Comments
 (0)