commentsInheritance.ts(21,12): error TS2564: Property 'i1_p1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(25,12): error TS2564: Property 'i1_l1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(26,12): error TS2564: Property 'i1_nc_p1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(29,12): error TS2564: Property 'i1_nc_l1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(31,12): error TS2564: Property 'p1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(36,12): error TS2564: Property 'l1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(38,12): error TS2564: Property 'nc_p1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(43,12): error TS2564: Property 'nc_l1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(59,12): error TS2564: Property 'c2_nc_p1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(66,12): error TS2564: Property 'p1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(74,12): error TS2564: Property 'nc_p1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(90,12): error TS2564: Property 'p1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(98,12): error TS2564: Property 'nc_p1' has no initializer and is not definitely assigned in the constructor.
commentsInheritance.ts(149,8): error TS2454: Variable 'i3_i' is used before being assigned.


==== commentsInheritance.ts (14 errors) ====
    /** i1 is interface with properties*/
    interface i1 {
        /** i1_p1*/
        i1_p1: number;
        /** i1_f1*/
        i1_f1(): void;
        /** i1_l1*/
        i1_l1: () => void;
        // il_nc_p1
        i1_nc_p1: number;
        i1_nc_f1(): void;
        i1_nc_l1: () => void;
        p1: number;
        f1(): void;
        l1: () => void;
        nc_p1: number;
        nc_f1(): void;
        nc_l1: () => void;
    }
    class c1 implements i1 {
        public i1_p1: number;
               ~~~~~
!!! error TS2564: Property 'i1_p1' has no initializer and is not definitely assigned in the constructor.
        // i1_f1
        public i1_f1() {
        }
        public i1_l1: () => void;
               ~~~~~
!!! error TS2564: Property 'i1_l1' has no initializer and is not definitely assigned in the constructor.
        public i1_nc_p1: number;
               ~~~~~~~~
!!! error TS2564: Property 'i1_nc_p1' has no initializer and is not definitely assigned in the constructor.
        public i1_nc_f1() {
        }
        public i1_nc_l1: () => void;
               ~~~~~~~~
!!! error TS2564: Property 'i1_nc_l1' has no initializer and is not definitely assigned in the constructor.
        /** c1_p1*/
        public p1: number;
               ~~
!!! error TS2564: Property 'p1' has no initializer and is not definitely assigned in the constructor.
        /** c1_f1*/
        public f1() {
        }
        /** c1_l1*/
        public l1: () => void;
               ~~
!!! error TS2564: Property 'l1' has no initializer and is not definitely assigned in the constructor.
        /** c1_nc_p1*/
        public nc_p1: number;
               ~~~~~
!!! error TS2564: Property 'nc_p1' has no initializer and is not definitely assigned in the constructor.
        /** c1_nc_f1*/
        public nc_f1() {
        }
        /** c1_nc_l1*/
        public nc_l1: () => void;
               ~~~~~
!!! error TS2564: Property 'nc_l1' has no initializer and is not definitely assigned in the constructor.
    }
    var i1_i: i1;
    var c1_i = new c1();
    // assign to interface
    i1_i = c1_i;
    class c2 {
        /** c2 c2_p1*/
        public c2_p1: number;
        /** c2 c2_f1*/
        public c2_f1() {
        }
        /** c2 c2_prop*/
        public get c2_prop() {
            return 10;
        }
        public c2_nc_p1: number;
               ~~~~~~~~
!!! error TS2564: Property 'c2_nc_p1' has no initializer and is not definitely assigned in the constructor.
        public c2_nc_f1() {
        }
        public get c2_nc_prop() {
            return 10;
        }
        /** c2 p1*/
        public p1: number;
               ~~
!!! error TS2564: Property 'p1' has no initializer and is not definitely assigned in the constructor.
        /** c2 f1*/
        public f1() {
        }
        /** c2 prop*/
        public get prop() {
            return 10;
        }
        public nc_p1: number;
               ~~~~~
!!! error TS2564: Property 'nc_p1' has no initializer and is not definitely assigned in the constructor.
        public nc_f1() {
        }
        public get nc_prop() {
            return 10;
        }
        /** c2 constructor*/
        constructor(a: number) {
            this.c2_p1 = a;
        }
    }
    class c3 extends c2 {
        constructor() {
            super(10);
        }
        /** c3 p1*/
        public p1: number;
               ~~
!!! error TS2564: Property 'p1' has no initializer and is not definitely assigned in the constructor.
        /** c3 f1*/
        public f1() {
        }
        /** c3 prop*/
        public get prop() {
            return 10;
        }
        public nc_p1: number;
               ~~~~~
!!! error TS2564: Property 'nc_p1' has no initializer and is not definitely assigned in the constructor.
        public nc_f1() {
        }
        public get nc_prop() {
            return 10;
        }
    }
    var c2_i = new c2(10);
    var c3_i = new c3();
    // assign
    c2_i = c3_i;
    class c4 extends c2 {
    }
    var c4_i = new c4(10);
    interface i2 {
        /** i2_p1*/
        i2_p1: number;
        /** i2_f1*/
        i2_f1(): void;
        /** i2_l1*/
        i2_l1: () => void;
        // i2_nc_p1
        i2_nc_p1: number;
        i2_nc_f1(): void;
        i2_nc_l1: () => void;
        /** i2 p1*/
        p1: number;
        /** i2 f1*/
        f1(): void;
        /** i2 l1*/
        l1: () => void;
        nc_p1: number;
        nc_f1(): void;
        nc_l1: () => void;
    }
    interface i3 extends i2 {
        /** i3 p1 */
        p1: number;
        /**
        * i3 f1
        */
        f1(): void;
        /** i3 l1*/
        l1: () => void;
        nc_p1: number;
        nc_f1(): void;
        nc_l1: () => void;
    }
    var i2_i: i2;
    var i3_i: i3;
    // assign to interface
    i2_i = i3_i;
           ~~~~
!!! error TS2454: Variable 'i3_i' is used before being assigned.
    