tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(8,5): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(8,10): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(9,5): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(9,6): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(10,5): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(10,14): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(32,33): error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(36,20): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(75,57): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(127,5): error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(127,10): error TS4005: Type parameter 'T' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(128,5): error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(128,6): error TS4007: Type parameter 'T' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(129,5): error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(129,14): error TS4013: Type parameter 'T' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(132,33): error TS4009: Type parameter 'T' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(134,20): error TS4011: Type parameter 'T' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(137,64): error TS4015: Type parameter 'T' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(164,9): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(164,14): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(165,9): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(165,10): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(166,9): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(166,18): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(188,37): error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(192,24): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(231,61): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(283,9): error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(283,14): error TS4005: Type parameter 'T' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(284,9): error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(284,10): error TS4007: Type parameter 'T' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(285,9): error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(285,18): error TS4013: Type parameter 'T' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(288,37): error TS4009: Type parameter 'T' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(290,24): error TS4011: Type parameter 'T' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,68): error TS4015: Type parameter 'T' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'.


==== tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts (36 errors) ====
    class privateClass {
    }
    
    export class publicClass {
    }
    
    export interface publicInterfaceWithPrivateTypeParameters {
        new <T extends privateClass>(): privateClass;  // Error
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'.
             ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'.
        <T extends privateClass>(): privateClass;  // Error
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'.
         ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'.
        myMethod<T extends privateClass>(): privateClass;  // Error
        ~~~~~~~~
!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'.
                 ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name '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 {
        static myPublicStaticMethod<T extends privateClass>() {  // Error
                                    ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateClass'.
        }
        private static myPrivateStaticMethod<T extends privateClass>() {
        }
        myPublicMethod<T extends privateClass>() {  // Error
                       ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'.
        }
        private myPrivateMethod<T extends privateClass>() {
        }
    }
    
    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>() {
        }
        myPublicMethod<T extends privateClass>() {
        }
        private myPrivateMethod<T extends privateClass>() {
        }
    }
    
    class privateClassWithWithPublicTypeParameters {
        static myPublicStaticMethod<T extends publicClass>() {
        }
        private static myPrivateStaticMethod<T extends publicClass>() {
        }
        myPublicMethod<T extends publicClass>() {
        }
        private myPrivateMethod<T extends publicClass>() {
        }
    }
    
    export function publicFunctionWithPrivateTypeParameters<T extends privateClass>() {  // Error
                                                            ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4016: Type parameter 'T' of exported function has or is using private name '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>() {
    }
    
    export interface publicInterfaceWithPrivatModuleTypeParameters {
        new <T extends privateModule.publicClass>(): privateModule.publicClass;  // Error
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4005: Type parameter 'T' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
        <T extends privateModule.publicClass>(): privateModule.publicClass;  // Error
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4007: Type parameter 'T' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
        myMethod<T extends privateModule.publicClass>(): privateModule.publicClass;  // Error
        ~~~~~~~~
!!! error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4013: Type parameter 'T' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
    }
    export class publicClassWithWithPrivateModuleTypeParameters {
        static myPublicStaticMethod<T extends privateModule.publicClass>() {  // Error
                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4009: Type parameter 'T' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'.
        }
        myPublicMethod<T extends privateModule.publicClass>() {  // Error
                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4011: Type parameter 'T' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'.
        }
    }
    export function publicFunctionWithPrivateMopduleTypeParameters<T extends privateModule.publicClass>() {  // Error
                                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4015: Type parameter 'T' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'.
    }
    
    
    interface privateInterfaceWithPrivatModuleTypeParameters {
        new <T extends privateModule.publicClass>(): privateModule.publicClass;
        <T extends privateModule.publicClass>(): privateModule.publicClass;
        myMethod<T extends privateModule.publicClass>(): privateModule.publicClass;
    }
    class privateClassWithWithPrivateModuleTypeParameters {
        static myPublicStaticMethod<T extends privateModule.publicClass>() {
        }
        myPublicMethod<T extends privateModule.publicClass>() {
        }
    }
    function privateFunctionWithPrivateMopduleTypeParameters<T extends privateModule.publicClass>() {
    }
    
    
    export module publicModule {
        class privateClass {
        }
    
        export class publicClass {
        }
    
        export interface publicInterfaceWithPrivateTypeParameters {
            new <T extends privateClass>(): privateClass;  // Error
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'.
                 ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'.
            <T extends privateClass>(): privateClass;  // Error
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'.
             ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'.
            myMethod<T extends privateClass>(): privateClass;  // Error
            ~~~~~~~~
!!! error TS4057: Return type of method from exported interface has or is using private name 'privateClass'.
                     ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name '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 {
            static myPublicStaticMethod<T extends privateClass>() {  // Error
                                        ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateClass'.
            }
            private static myPrivateStaticMethod<T extends privateClass>() {
            }
            myPublicMethod<T extends privateClass>() {  // Error
                           ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'.
            }
            private myPrivateMethod<T extends privateClass>() {
            }
        }
    
        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>() {
            }
            myPublicMethod<T extends privateClass>() {
            }
            private myPrivateMethod<T extends privateClass>() {
            }
        }
    
        class privateClassWithWithPublicTypeParameters {
            static myPublicStaticMethod<T extends publicClass>() {
            }
            private static myPrivateStaticMethod<T extends publicClass>() {
            }
            myPublicMethod<T extends publicClass>() {
            }
            private myPrivateMethod<T extends publicClass>() {
            }
        }
    
        export function publicFunctionWithPrivateTypeParameters<T extends privateClass>() {  // Error
                                                                ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4016: Type parameter 'T' of exported function has or is using private name '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>() {
        }
    
        export interface publicInterfaceWithPrivatModuleTypeParameters {
            new <T extends privateModule.publicClass>(): privateModule.publicClass;  // Error
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4044: Return type of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4005: Type parameter 'T' of constructor signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
            <T extends privateModule.publicClass>(): privateModule.publicClass;  // Error
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4046: Return type of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4007: Type parameter 'T' of call signature from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
            myMethod<T extends privateModule.publicClass>(): privateModule.publicClass;  // Error
            ~~~~~~~~
!!! error TS4056: Return type of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4013: Type parameter 'T' of method from exported interface has or is using name 'privateModule.publicClass' from private module 'privateModule'.
        }
        export class publicClassWithWithPrivateModuleTypeParameters {
            static myPublicStaticMethod<T extends privateModule.publicClass>() {  // Error
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4009: Type parameter 'T' of public static method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'.
            }
            myPublicMethod<T extends privateModule.publicClass>() {  // Error
                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4011: Type parameter 'T' of public method from exported class has or is using name 'privateModule.publicClass' from private module 'privateModule'.
            }
        }
        export function publicFunctionWithPrivateMopduleTypeParameters<T extends privateModule.publicClass>() {  // Error
                                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS4015: Type parameter 'T' of exported function has or is using name 'privateModule.publicClass' from private module 'privateModule'.
        }
    
    
        interface privateInterfaceWithPrivatModuleTypeParameters {
            new <T extends privateModule.publicClass>(): privateModule.publicClass;  
            <T extends privateModule.publicClass>(): privateModule.publicClass;  
            myMethod<T extends privateModule.publicClass>(): privateModule.publicClass;  
        }
        class privateClassWithWithPrivateModuleTypeParameters {
            static myPublicStaticMethod<T extends privateModule.publicClass>() {  
            }
            myPublicMethod<T extends privateModule.publicClass>() { 
            }
        }
        function privateFunctionWithPrivateMopduleTypeParameters<T extends privateModule.publicClass>() { 
        }
    
    }
    
    module privateModule {
        class privateClass {
        }
    
        export class publicClass {
        }
    
        export interface publicInterfaceWithPrivateTypeParameters {
            new <T extends privateClass>(): privateClass; 
            <T extends privateClass>(): privateClass;
            myMethod<T extends privateClass>(): 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 {
            static myPublicStaticMethod<T extends privateClass>() { 
            }
            private static myPrivateStaticMethod<T extends privateClass>() {
            }
            myPublicMethod<T extends privateClass>() {  
            }
            private myPrivateMethod<T extends privateClass>() {
            }
        }
    
        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>() {
            }
            myPublicMethod<T extends privateClass>() {
            }
            private myPrivateMethod<T extends privateClass>() {
            }
        }
    
        class privateClassWithWithPublicTypeParameters {
            static myPublicStaticMethod<T extends publicClass>() {
            }
            private static myPrivateStaticMethod<T extends publicClass>() {
            }
            myPublicMethod<T extends publicClass>() {
            }
            private myPrivateMethod<T extends publicClass>() {
            }
        }
    
        export function publicFunctionWithPrivateTypeParameters<T extends 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>() {
        }
    }