tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(8,20): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(8,37): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(9,16): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(9,33): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(10,24): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(10,41): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(32,43): 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,30): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(75,67): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(127,20): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(127,50): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(128,16): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(128,46): error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(129,24): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(129,54): error TS4057: Return type of method from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(132,43): error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(134,30): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(137,74): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(164,24): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(164,41): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(165,20): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(165,37): error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(166,28): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(166,45): error TS4057: Return type of method from exported interface has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(188,47): 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,34): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(231,71): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateClass'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(283,24): error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(283,54): error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(284,20): error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(284,50): error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(285,28): error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(285,58): error TS4057: Return type of method from exported interface has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(288,47): error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(290,34): error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateModule'.
tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts(293,78): error TS4016: Type parameter 'T' of exported function has or is using private name 'privateModule'.


==== tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts (36 errors) ====
    class privateClass {
    }
    
    export class publicClass {
    }
    
    export interface publicInterfaceWithPrivateTypeParameters {
        new <T extends privateClass>(): privateClass;  // Error
                       ~~~~~~~~~~~~
!!! error TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'.
                                        ~~~~~~~~~~~~
!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'.
        <T extends privateClass>(): privateClass;  // Error
                   ~~~~~~~~~~~~
!!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'.
                                    ~~~~~~~~~~~~
!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'.
        myMethod<T extends privateClass>(): privateClass;  // Error
                           ~~~~~~~~~~~~
!!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'.
                                            ~~~~~~~~~~~~
!!! error TS4057: Return type 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 TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateModule'.
                                                     ~~~~~~~~~~~~~
!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'.
        <T extends privateModule.publicClass>(): privateModule.publicClass;  // Error
                   ~~~~~~~~~~~~~
!!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateModule'.
                                                 ~~~~~~~~~~~~~
!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'.
        myMethod<T extends privateModule.publicClass>(): privateModule.publicClass;  // Error
                           ~~~~~~~~~~~~~
!!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateModule'.
                                                         ~~~~~~~~~~~~~
!!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'.
    }
    export class publicClassWithWithPrivateModuleTypeParameters {
        static myPublicStaticMethod<T extends privateModule.publicClass>() {  // Error
                                              ~~~~~~~~~~~~~
!!! error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateModule'.
        }
        myPublicMethod<T extends privateModule.publicClass>() {  // Error
                                 ~~~~~~~~~~~~~
!!! error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateModule'.
        }
    }
    export function publicFunctionWithPrivateMopduleTypeParameters<T extends privateModule.publicClass>() {  // Error
                                                                             ~~~~~~~~~~~~~
!!! error TS4016: Type parameter 'T' of exported function has or is using private name '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 TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'.
                                            ~~~~~~~~~~~~
!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateClass'.
            <T extends privateClass>(): privateClass;  // Error
                       ~~~~~~~~~~~~
!!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateClass'.
                                        ~~~~~~~~~~~~
!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateClass'.
            myMethod<T extends privateClass>(): privateClass;  // Error
                               ~~~~~~~~~~~~
!!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateClass'.
                                                ~~~~~~~~~~~~
!!! error TS4057: Return type 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 TS4006: Type parameter 'T' of constructor signature from exported interface has or is using private name 'privateModule'.
                                                         ~~~~~~~~~~~~~
!!! error TS4045: Return type of constructor signature from exported interface has or is using private name 'privateModule'.
            <T extends privateModule.publicClass>(): privateModule.publicClass;  // Error
                       ~~~~~~~~~~~~~
!!! error TS4008: Type parameter 'T' of call signature from exported interface has or is using private name 'privateModule'.
                                                     ~~~~~~~~~~~~~
!!! error TS4047: Return type of call signature from exported interface has or is using private name 'privateModule'.
            myMethod<T extends privateModule.publicClass>(): privateModule.publicClass;  // Error
                               ~~~~~~~~~~~~~
!!! error TS4014: Type parameter 'T' of method from exported interface has or is using private name 'privateModule'.
                                                             ~~~~~~~~~~~~~
!!! error TS4057: Return type of method from exported interface has or is using private name 'privateModule'.
        }
        export class publicClassWithWithPrivateModuleTypeParameters {
            static myPublicStaticMethod<T extends privateModule.publicClass>() {  // Error
                                                  ~~~~~~~~~~~~~
!!! error TS4010: Type parameter 'T' of public static method from exported class has or is using private name 'privateModule'.
            }
            myPublicMethod<T extends privateModule.publicClass>() {  // Error
                                     ~~~~~~~~~~~~~
!!! error TS4012: Type parameter 'T' of public method from exported class has or is using private name 'privateModule'.
            }
        }
        export function publicFunctionWithPrivateMopduleTypeParameters<T extends privateModule.publicClass>() {  // Error
                                                                                 ~~~~~~~~~~~~~
!!! error TS4016: Type parameter 'T' of exported function has or is using private name '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>() {
        }
    }