TypeScript/tests/baselines/reference/jsdocTemplateTagDefault.types
Ron Buckton cf787e9bcf
Fix name resolution in typedef and allow defaults for template tags (#45483)
* Fix name resolution in typedef and allow defaults for template tags

* Inline parseBracketNameInTemplateTag

* Update baselines

* Add js declaration emit tests
2021-09-08 17:05:07 -07:00

92 lines
2.1 KiB
Plaintext

=== tests/cases/conformance/jsdoc/file.js ===
/**
* @template {string | number} [T=string] - ok: defaults are permitted
* @typedef {[T]} A
*/
/** @type {A} */ // ok, default for `T` in `A` is `string`
const aDefault1 = [""];
>aDefault1 : A<string>
>[""] : [string]
>"" : ""
/** @type {A} */ // error: `number` is not assignable to string`
const aDefault2 = [0];
>aDefault2 : A<string>
>[0] : [number]
>0 : 0
/** @type {A<string>} */ // ok, `T` is provided for `A`
const aString = [""];
>aString : A<string>
>[""] : [string]
>"" : ""
/** @type {A<number>} */ // ok, `T` is provided for `A`
const aNumber = [0];
>aNumber : A<number>
>[0] : [number]
>0 : 0
/**
* @template T
* @template [U=T] - ok: default can reference earlier type parameter
* @typedef {[T, U]} B
*/
/**
* @template {string | number} [T] - error: default requires an `=type`
* @typedef {[T]} C
*/
/**
* @template {string | number} [T=] - error: default requires a `type`
* @typedef {[T]} D
*/
/**
* @template {string | number} [T=string]
* @template U - error: Required type parameters cannot follow optional type parameters
* @typedef {[T, U]} E
*/
/**
* @template [T=U] - error: Type parameter defaults can only reference previously declared type parameters.
* @template [U=T]
* @typedef {[T, U]} G
*/
/**
* @template T
* @template [U=T] - ok: default can reference earlier type parameter
* @param {T} a
* @param {U} b
*/
function f1(a, b) {}
>f1 : <T, U = T>(a: T, b: U) => void
>a : T
>b : U
/**
* @template {string | number} [T=string]
* @template U - error: Required type parameters cannot follow optional type parameters
* @param {T} a
* @param {U} b
*/
function f2(a, b) {}
>f2 : <T extends string | number = string, U>(a: T, b: U) => void
>a : T
>b : U
/**
* @template [T=U] - error: Type parameter defaults can only reference previously declared type parameters.
* @template [U=T]
* @param {T} a
* @param {U} b
*/
function f3(a, b) {}
>f3 : <T = U, U = T>(a: T, b: U) => void
>a : T
>b : U