cf787e9bcf
* Fix name resolution in typedef and allow defaults for template tags * Inline parseBracketNameInTemplateTag * Update baselines * Add js declaration emit tests
92 lines
2.1 KiB
Plaintext
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
|
|
|