tests/cases/conformance/salsa/typeFromPropertyAssignment36.ts(11,7): error TS2565: Property 'q' is used before being assigned.
tests/cases/conformance/salsa/typeFromPropertyAssignment36.ts(42,3): error TS2565: Property 'q' is used before being assigned.
tests/cases/conformance/salsa/typeFromPropertyAssignment36.ts(64,3): error TS2565: Property 'expando' is used before being assigned.


==== tests/cases/conformance/salsa/typeFromPropertyAssignment36.ts (3 errors) ====
    function f(b: boolean) {
        function d() {
        }
        d.e = 12
        d.e
    
        if (b) {
            d.q = false
        }
        // error d.q might not be assigned
        d.q
          ~
!!! error TS2565: Property 'q' is used before being assigned.
        if (b) {
            d.q = false
        }
        else {
            d.q = true
        }
        d.q
        if (b) {
            d.r = 1
        }
        else {
            d.r = 2
        }
        d.r
        if (b) {
            d.s = 'hi'
        }
        return d
    }
    // OK to access possibly-unassigned properties outside the initialising scope
    var test = f(true).s
    
    function d() {
    }
    d.e = 12
    d.e
    
    if (!!false) {
        d.q = false
    }
    d.q
      ~
!!! error TS2565: Property 'q' is used before being assigned.
    if (!!false) {
        d.q = false
    }
    else {
        d.q = true
    }
    d.q
    if (!!false) {
        d.r = 1
    }
    else {
        d.r = 2
    }
    d.r
    
    // test function expressions too
    const g = function() {
    }
    if (!!false) {
        g.expando = 1
    }
    g.expando // error
      ~~~~~~~
!!! error TS2565: Property 'expando' is used before being assigned.
    
    if (!!false) {
        g.both = 'hi'
    }
    else {
        g.both = 0
    }
    g.both
    