index.js(57,36): error TS2565: Property 'j' is used before being assigned.


==== index.js (1 errors) ====
    module.exports.a = function a() {}
    
    module.exports.b = function b() {}
    module.exports.b.cat = "cat";
    
    module.exports.c = function c() {}
    module.exports.c.Cls = class {}
    
    /**
     * @param {number} a
     * @param {number} b
     * @return {string} 
     */
    module.exports.d = function d(a, b) { return /** @type {*} */(null); }
    
    /**
     * @template T,U
     * @param {T} a
     * @param {U} b
     * @return {T & U} 
     */
    module.exports.e = function e(a, b) { return /** @type {*} */(null); }
    
    /**
     * @template T
     * @param {T} a
     */
    module.exports.f = function f(a) {
        return a;
    }
    module.exports.f.self = module.exports.f;
    
    /**
     * @param {{x: string}} a
     * @param {{y: typeof module.exports.b}} b
     */
    function g(a, b) {
        return a.x && b.y();
    }
    
    module.exports.g = g;
    
    /**
     * @param {{x: string}} a
     * @param {{y: typeof module.exports.b}} b
     */
    function hh(a, b) {
        return a.x && b.y();
    }
    
    module.exports.h = hh;
    
    module.exports.i = function i() {}
    module.exports.ii = module.exports.i;
    
    // note that this last one doesn't make much sense in cjs, since exports aren't hoisted bindings
    module.exports.jj = module.exports.j;
                                       ~
!!! error TS2565: Property 'j' is used before being assigned.
    module.exports.j = function j() {}
    