==== tests/cases/compiler/privacyTypeParameterOfFunction.ts (9 errors) ====
    class privateClass {
    }
    
    export class publicClass {
    }
    
    export interface publicInterfaceWithPrivateTypeParameters {
        // TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1
        new <T extends privateClass>(): privateClass; 
             ~~~~~~~~~~~~~~~~~~~~~~
!!! privacyTypeParameterOfFunction.ts(9,10): error TS2208: TypeParameter 'T extends privateClass' of constructor signature from exported interface has or is using private type 'privateClass'.
                                        ~~~~~~~~~~~~
!!! privacyTypeParameterOfFunction.ts(9,37): error TS2052: Return type of constructor signature from exported interface has or is using private type 'privateClass'.
    
        // TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1
        <T extends privateClass>(): privateClass;
         ~~~~~~~~~~~~~~~~~~~~~~
!!! privacyTypeParameterOfFunction.ts(12,6): error TS2209: TypeParameter 'T extends privateClass' of call signature from exported interface has or is using private type 'privateClass'.
                                    ~~~~~~~~~~~~
!!! privacyTypeParameterOfFunction.ts(12,33): error TS2053: Return type of call signature from exported interface has or is using private type 'privateClass'.
    
        // TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1
        myMethod<T extends privateClass>(): privateClass;
                 ~~~~~~~~~~~~~~~~~~~~~~
!!! privacyTypeParameterOfFunction.ts(15,14): error TS2212: TypeParameter 'T extends privateClass' of method from exported interface has or is using private type 'privateClass'.
                                            ~~~~~~~~~~~~
!!! privacyTypeParameterOfFunction.ts(15,41): error TS2057: Return type of method from exported interface has or is using private type 'privateClass'.
    }
    
    export interface publicInterfaceWithPublicTypeParameters {
        new <T extends publicClass>(): publicClass;
        <T extends publicClass>(): publicClass;
        myMethod<T extends publicClass>(): publicClass;
    }
    
    interface privateInterfaceWithPrivateTypeParameters {
        new <T extends privateClass>(): privateClass;
        <T extends privateClass>(): privateClass;
        myMethod<T extends privateClass>(): privateClass;
    }
    
    interface privateInterfaceWithPublicTypeParameters {
        new <T extends publicClass>(): publicClass;
        <T extends publicClass>(): publicClass;
        myMethod<T extends publicClass>(): publicClass;
    }
    
    export class publicClassWithWithPrivateTypeParameters {
        // TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1
        static myPublicStaticMethod<T extends privateClass>() {
                                    ~~~~~~~~~~~~~~~~~~~~~~
!!! privacyTypeParameterOfFunction.ts(38,33): error TS2210: TypeParameter 'T extends privateClass' of public static method from exported class has or is using private type 'privateClass'.
        }
        private static myPrivateStaticMethod<T extends privateClass>() { // No error
        }
        // TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1
        myPublicMethod<T extends privateClass>() {
                       ~~~~~~~~~~~~~~~~~~~~~~
!!! privacyTypeParameterOfFunction.ts(43,20): error TS2211: TypeParameter 'T extends privateClass' of public method from exported class has or is using private type 'privateClass'.
        }
        private myPrivateMethod<T extends privateClass>() { // No error
        }
    }
    
    export class publicClassWithWithPublicTypeParameters {
        static myPublicStaticMethod<T extends publicClass>() {
        }
        private static myPrivateStaticMethod<T extends publicClass>() { 
        }
        myPublicMethod<T extends publicClass>() {
        }
        private myPrivateMethod<T extends publicClass>() {
        }
    }
    
    class privateClassWithWithPrivateTypeParameters {
        static myPublicStaticMethod<T extends privateClass>() {
        }
        private static myPrivateStaticMethod<T extends privateClass>() { // No error
        }
        myPublicMethod<T extends privateClass>() {
        }
        private myPrivateMethod<T extends privateClass>() { // No error
        }
    }
    
    class privateClassWithWithPublicTypeParameters {
        static myPublicStaticMethod<T extends publicClass>() {
        }
        private static myPrivateStaticMethod<T extends publicClass>() {
        }
        myPublicMethod<T extends publicClass>() {
        }
        private myPrivateMethod<T extends publicClass>() {
        }
    }
    
    // TypeParameter_0_of_exported_function_has_or_is_using_private_type_1
    export function publicFunctionWithPrivateTypeParameters<T extends privateClass>() {
                                                            ~~~~~~~~~~~~~~~~~~~~~~
!!! privacyTypeParameterOfFunction.ts(83,57): error TS2213: TypeParameter 'T extends privateClass' of exported function has or is using private type 'privateClass'.
    }
    
    export function publicFunctionWithPublicTypeParameters<T extends publicClass>() {
    }
    
    function privateFunctionWithPrivateTypeParameters<T extends privateClass>() {
    }
    
    function privateFunctionWithPublicTypeParameters<T extends publicClass>() {
    }
    
    export interface publicInterfaceWithPublicTypeParametersWithoutExtends {
        new <T>(): publicClass;
        <T>(): publicClass;
        myMethod<T>(): publicClass;
    }
    
    interface privateInterfaceWithPublicTypeParametersWithoutExtends {
        new <T>(): publicClass;
        <T>(): publicClass;
        myMethod<T>(): publicClass;
    }
    
    export class publicClassWithWithPublicTypeParametersWithoutExtends {
        static myPublicStaticMethod<T>() {
        }
        private static myPrivateStaticMethod<T>() {
        }
        myPublicMethod<T>() {
        }
        private myPrivateMethod<T>() {
        }
    }
    class privateClassWithWithPublicTypeParametersWithoutExtends {
        static myPublicStaticMethod<T>() {
        }
        private static myPrivateStaticMethod<T>() {
        }
        myPublicMethod<T>() {
        }
        private myPrivateMethod<T>() {
        }
    }
    
    export function publicFunctionWithPublicTypeParametersWithoutExtends<T>() {
    }
    
    function privateFunctionWithPublicTypeParametersWithoutExtends<T>() {
    }