Returned generic function is instantiated correctly

This commit is contained in:
Nathan Shively-Sanders 2017-06-12 13:56:17 -07:00
parent 1b585dd503
commit da83eb967a
3 changed files with 101 additions and 0 deletions

View File

@ -0,0 +1,36 @@
=== tests/cases/conformance/jsdoc/jsdocTemplateTag.ts ===
/**
* @param {T} a
* @template T
*/
function f<T>(a: T) {
>f : Symbol(f, Decl(jsdocTemplateTag.ts, 0, 0))
>T : Symbol(T, Decl(jsdocTemplateTag.ts, 4, 11))
>a : Symbol(a, Decl(jsdocTemplateTag.ts, 4, 14))
>T : Symbol(T, Decl(jsdocTemplateTag.ts, 4, 11))
return () => a
>a : Symbol(a, Decl(jsdocTemplateTag.ts, 4, 14))
}
let n = f(1)()
>n : Symbol(n, Decl(jsdocTemplateTag.ts, 7, 3))
>f : Symbol(f, Decl(jsdocTemplateTag.ts, 0, 0))
/**
* @param {T} a
* @template T
* @returns {function(): T}
*/
function g<T>(a: T) {
>g : Symbol(g, Decl(jsdocTemplateTag.ts, 7, 14))
>T : Symbol(T, Decl(jsdocTemplateTag.ts, 14, 11))
>a : Symbol(a, Decl(jsdocTemplateTag.ts, 14, 14))
>T : Symbol(T, Decl(jsdocTemplateTag.ts, 14, 11))
return () => a
>a : Symbol(a, Decl(jsdocTemplateTag.ts, 14, 14))
}
let s = g('hi')()
>s : Symbol(s, Decl(jsdocTemplateTag.ts, 17, 3))
>g : Symbol(g, Decl(jsdocTemplateTag.ts, 7, 14))

View File

@ -0,0 +1,44 @@
=== tests/cases/conformance/jsdoc/jsdocTemplateTag.ts ===
/**
* @param {T} a
* @template T
*/
function f<T>(a: T) {
>f : <T>(a: T) => () => T
>T : T
>a : T
>T : T
return () => a
>() => a : () => T
>a : T
}
let n = f(1)()
>n : number
>f(1)() : number
>f(1) : () => number
>f : <T>(a: T) => () => T
>1 : 1
/**
* @param {T} a
* @template T
* @returns {function(): T}
*/
function g<T>(a: T) {
>g : <T>(a: T) => () => T
>T : T
>a : T
>T : T
return () => a
>() => a : () => T
>a : T
}
let s = g('hi')()
>s : string
>g('hi')() : string
>g('hi') : () => string
>g : <T>(a: T) => () => T
>'hi' : "hi"

View File

@ -0,0 +1,21 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
/**
* @param {T} a
* @template T
*/
function f<T>(a: T) {
return () => a
}
let n = f(1)()
/**
* @param {T} a
* @template T
* @returns {function(): T}
*/
function g<T>(a: T) {
return () => a
}
let s = g('hi')()