tests/cases/compiler/mixinPrivateAndProtected.ts(46,3): error TS2445: Property 'ptd' is protected and only accessible within class 'A' and its subclasses.
tests/cases/compiler/mixinPrivateAndProtected.ts(47,3): error TS2341: Property 'pvt' is private and only accessible within class 'A'.
tests/cases/compiler/mixinPrivateAndProtected.ts(50,4): error TS2445: Property 'ptd' is protected and only accessible within class 'mixB<typeof A>.(Anonymous class) & A' and its subclasses.
tests/cases/compiler/mixinPrivateAndProtected.ts(51,4): error TS2546: Property 'pvt' has conflicting declarations and is inaccessible in type 'mixB<typeof A>.(Anonymous class) & A'.
tests/cases/compiler/mixinPrivateAndProtected.ts(54,5): error TS2445: Property 'ptd' is protected and only accessible within class 'mixC<{ new (...args: any[]): mixB<typeof A>.(Anonymous class); prototype: mixB<any>.(Anonymous class); } & typeof A>.(Anonymous class) & mixB<typeof A>.(Anonymous class) & A' and its subclasses.
tests/cases/compiler/mixinPrivateAndProtected.ts(55,5): error TS2546: Property 'pvt' has conflicting declarations and is inaccessible in type 'mixC<{ new (...args: any[]): mixB<typeof A>.(Anonymous class); prototype: mixB<any>.(Anonymous class); } & typeof A>.(Anonymous class) & mixB<typeof A>.(Anonymous class) & A'.
tests/cases/compiler/mixinPrivateAndProtected.ts(58,6): error TS2445: Property 'ptd' is protected and only accessible within class 'mixC<{ new (...args: any[]): mixB2<typeof A>.(Anonymous class); prototype: mixB2<any>.(Anonymous class); } & typeof A>.(Anonymous class) & mixB2<typeof A>.(Anonymous class) & A' and its subclasses.
tests/cases/compiler/mixinPrivateAndProtected.ts(59,6): error TS2546: Property 'pvt' has conflicting declarations and is inaccessible in type 'mixC<{ new (...args: any[]): mixB2<typeof A>.(Anonymous class); prototype: mixB2<any>.(Anonymous class); } & typeof A>.(Anonymous class) & mixB2<typeof A>.(Anonymous class) & A'.


==== tests/cases/compiler/mixinPrivateAndProtected.ts (8 errors) ====
    // Repro from #13830
    
    type Constructor<T> = new(...args: any[]) => T;
    
    class A {
        public pb: number = 2;
        protected ptd: number = 1;
        private pvt: number = 0;
    }
    
    function mixB<T extends Constructor<{}>>(Cls: T) {
        return class extends Cls {
            protected ptd: number = 10;
            private pvt: number = 0;
        };
    }
    
    function mixB2<T extends Constructor<A>>(Cls: T) {
        return class extends Cls {
            protected ptd: number = 10;
        };
    }
    
    const
        AB = mixB(A),
        AB2 = mixB2(A);
    
    function mixC<T extends Constructor<{}>>(Cls: T) {
        return class extends Cls {
            protected ptd: number = 100;
            private pvt: number = 0;
        };
    }
    
    const
        AB2C = mixC(AB2),
        ABC = mixC(AB);
    
    const
        a = new A(),
        ab = new AB(),
        abc = new ABC(),
        ab2c = new AB2C();
    
    a.pb.toFixed();
    a.ptd.toFixed();    // Error
      ~~~
!!! error TS2445: Property 'ptd' is protected and only accessible within class 'A' and its subclasses.
    a.pvt.toFixed();    // Error
      ~~~
!!! error TS2341: Property 'pvt' is private and only accessible within class 'A'.
    
    ab.pb.toFixed();
    ab.ptd.toFixed();   // Error
       ~~~
!!! error TS2445: Property 'ptd' is protected and only accessible within class 'mixB<typeof A>.(Anonymous class) & A' and its subclasses.
    ab.pvt.toFixed();   // Error
       ~~~
!!! error TS2546: Property 'pvt' has conflicting declarations and is inaccessible in type 'mixB<typeof A>.(Anonymous class) & A'.
    
    abc.pb.toFixed();
    abc.ptd.toFixed();  // Error
        ~~~
!!! error TS2445: Property 'ptd' is protected and only accessible within class 'mixC<{ new (...args: any[]): mixB<typeof A>.(Anonymous class); prototype: mixB<any>.(Anonymous class); } & typeof A>.(Anonymous class) & mixB<typeof A>.(Anonymous class) & A' and its subclasses.
    abc.pvt.toFixed();  // Error
        ~~~
!!! error TS2546: Property 'pvt' has conflicting declarations and is inaccessible in type 'mixC<{ new (...args: any[]): mixB<typeof A>.(Anonymous class); prototype: mixB<any>.(Anonymous class); } & typeof A>.(Anonymous class) & mixB<typeof A>.(Anonymous class) & A'.
    
    ab2c.pb.toFixed();
    ab2c.ptd.toFixed(); // Error
         ~~~
!!! error TS2445: Property 'ptd' is protected and only accessible within class 'mixC<{ new (...args: any[]): mixB2<typeof A>.(Anonymous class); prototype: mixB2<any>.(Anonymous class); } & typeof A>.(Anonymous class) & mixB2<typeof A>.(Anonymous class) & A' and its subclasses.
    ab2c.pvt.toFixed(); // Error
         ~~~
!!! error TS2546: Property 'pvt' has conflicting declarations and is inaccessible in type 'mixC<{ new (...args: any[]): mixB2<typeof A>.(Anonymous class); prototype: mixB2<any>.(Anonymous class); } & typeof A>.(Anonymous class) & mixB2<typeof A>.(Anonymous class) & A'.
    
    // Repro from #13924
    
    class Person {
    	constructor(public name: string) {}
    
    	protected myProtectedFunction() {
    		// do something
    	}
    }
    
    function PersonMixin<T extends Constructor<Person>>(Base: T) {
    	return class extends Base {
    		constructor(...args: any[]) {
    			super(...args);
    		}
    
    		myProtectedFunction() {
    			super.myProtectedFunction();
    			// do more things
    		}
    	};
    }
    
    class Customer extends PersonMixin(Person) {
    	accountBalance: number;
        f() {
        }
    }
    