tests/cases/conformance/jsdoc/file.js(9,20): error TS2322: Type 'number' is not assignable to type 'string'.
tests/cases/conformance/jsdoc/file.js(22,34): error TS1005: '=' expected.
tests/cases/conformance/jsdoc/file.js(27,35): error TS1110: Type expected.
tests/cases/conformance/jsdoc/file.js(33,14): error TS2706: Required type parameters may not follow optional type parameters.
tests/cases/conformance/jsdoc/file.js(38,17): error TS2744: Type parameter defaults can only reference previously declared type parameters.
tests/cases/conformance/jsdoc/file.js(53,14): error TS2706: Required type parameters may not follow optional type parameters.
tests/cases/conformance/jsdoc/file.js(60,17): error TS2744: Type parameter defaults can only reference previously declared type parameters.


==== tests/cases/conformance/jsdoc/file.js (7 errors) ====
    /**
     * @template {string | number} [T=string] - ok: defaults are permitted
     * @typedef {[T]} A
     */
    
    /** @type {A} */ // ok, default for `T` in `A` is `string`
    const aDefault1 = [""];
    /** @type {A} */ // error: `number` is not assignable to string`
    const aDefault2 = [0];
                       ~
!!! error TS2322: Type 'number' is not assignable to type 'string'.
    /** @type {A<string>} */ // ok, `T` is provided for `A`
    const aString = [""];
    /** @type {A<number>} */ // ok, `T` is provided for `A`
    const aNumber = [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`
                                     ~
!!! error TS1005: '=' expected.
     * @typedef {[T]} C
     */
    
    /**
     * @template {string | number} [T=] - error: default requires a `type`
                                      ~
!!! error TS1110: Type expected.
     * @typedef {[T]} D
     */
    
    /**
     * @template {string | number} [T=string]
     * @template U - error: Required type parameters cannot follow optional type parameters
                 ~
!!! error TS2706: Required type parameters may not follow optional type parameters.
     * @typedef {[T, U]} E
     */
    
    /**
     * @template [T=U] - error: Type parameter defaults can only reference previously declared type parameters.
                    ~
!!! error TS2744: 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) {}
    
     /**
     * @template {string | number} [T=string]
     * @template U - error: Required type parameters cannot follow optional type parameters
                 ~
!!! error TS2706: Required type parameters may not follow optional type parameters.
     * @param {T} a
     * @param {U} b
     */
    function f2(a, b) {}
    
    /**
     * @template [T=U] - error: Type parameter defaults can only reference previously declared type parameters.
                    ~
!!! error TS2744: Type parameter defaults can only reference previously declared type parameters.
     * @template [U=T]
     * @param {T} a
     * @param {U} b
     */
    function f3(a, b) {}
    