=== tests/cases/compiler/privacyTypeParameterOfFunction.ts === class privateClass { >privateClass : privateClass } export class publicClass { >publicClass : publicClass } export interface publicInterfaceWithPrivateTypeParameters { >publicInterfaceWithPrivateTypeParameters : publicInterfaceWithPrivateTypeParameters // TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1 new (): privateClass; >T : T >privateClass : privateClass >privateClass : privateClass // TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1 (): privateClass; >T : T >privateClass : privateClass >privateClass : privateClass // TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1 myMethod(): privateClass; >myMethod : () => privateClass >T : T >privateClass : privateClass >privateClass : privateClass } export interface publicInterfaceWithPublicTypeParameters { >publicInterfaceWithPublicTypeParameters : publicInterfaceWithPublicTypeParameters new (): publicClass; >T : T >publicClass : publicClass >publicClass : publicClass (): publicClass; >T : T >publicClass : publicClass >publicClass : publicClass myMethod(): publicClass; >myMethod : () => publicClass >T : T >publicClass : publicClass >publicClass : publicClass } interface privateInterfaceWithPrivateTypeParameters { >privateInterfaceWithPrivateTypeParameters : privateInterfaceWithPrivateTypeParameters new (): privateClass; >T : T >privateClass : privateClass >privateClass : privateClass (): privateClass; >T : T >privateClass : privateClass >privateClass : privateClass myMethod(): privateClass; >myMethod : () => privateClass >T : T >privateClass : privateClass >privateClass : privateClass } interface privateInterfaceWithPublicTypeParameters { >privateInterfaceWithPublicTypeParameters : privateInterfaceWithPublicTypeParameters new (): publicClass; >T : T >publicClass : publicClass >publicClass : publicClass (): publicClass; >T : T >publicClass : publicClass >publicClass : publicClass myMethod(): publicClass; >myMethod : () => publicClass >T : T >publicClass : publicClass >publicClass : publicClass } export class publicClassWithWithPrivateTypeParameters { >publicClassWithWithPrivateTypeParameters : publicClassWithWithPrivateTypeParameters // TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1 static myPublicStaticMethod() { >myPublicStaticMethod : () => void >T : T >privateClass : privateClass } private static myPrivateStaticMethod() { // No error >myPrivateStaticMethod : () => void >T : T >privateClass : privateClass } // TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1 myPublicMethod() { >myPublicMethod : () => void >T : T >privateClass : privateClass } private myPrivateMethod() { // No error >myPrivateMethod : () => void >T : T >privateClass : privateClass } } export class publicClassWithWithPublicTypeParameters { >publicClassWithWithPublicTypeParameters : publicClassWithWithPublicTypeParameters static myPublicStaticMethod() { >myPublicStaticMethod : () => void >T : T >publicClass : publicClass } private static myPrivateStaticMethod() { >myPrivateStaticMethod : () => void >T : T >publicClass : publicClass } myPublicMethod() { >myPublicMethod : () => void >T : T >publicClass : publicClass } private myPrivateMethod() { >myPrivateMethod : () => void >T : T >publicClass : publicClass } } class privateClassWithWithPrivateTypeParameters { >privateClassWithWithPrivateTypeParameters : privateClassWithWithPrivateTypeParameters static myPublicStaticMethod() { >myPublicStaticMethod : () => void >T : T >privateClass : privateClass } private static myPrivateStaticMethod() { // No error >myPrivateStaticMethod : () => void >T : T >privateClass : privateClass } myPublicMethod() { >myPublicMethod : () => void >T : T >privateClass : privateClass } private myPrivateMethod() { // No error >myPrivateMethod : () => void >T : T >privateClass : privateClass } } class privateClassWithWithPublicTypeParameters { >privateClassWithWithPublicTypeParameters : privateClassWithWithPublicTypeParameters static myPublicStaticMethod() { >myPublicStaticMethod : () => void >T : T >publicClass : publicClass } private static myPrivateStaticMethod() { >myPrivateStaticMethod : () => void >T : T >publicClass : publicClass } myPublicMethod() { >myPublicMethod : () => void >T : T >publicClass : publicClass } private myPrivateMethod() { >myPrivateMethod : () => void >T : T >publicClass : publicClass } } // TypeParameter_0_of_exported_function_has_or_is_using_private_type_1 export function publicFunctionWithPrivateTypeParameters() { >publicFunctionWithPrivateTypeParameters : () => void >T : T >privateClass : privateClass } export function publicFunctionWithPublicTypeParameters() { >publicFunctionWithPublicTypeParameters : () => void >T : T >publicClass : publicClass } function privateFunctionWithPrivateTypeParameters() { >privateFunctionWithPrivateTypeParameters : () => void >T : T >privateClass : privateClass } function privateFunctionWithPublicTypeParameters() { >privateFunctionWithPublicTypeParameters : () => void >T : T >publicClass : publicClass } export interface publicInterfaceWithPublicTypeParametersWithoutExtends { >publicInterfaceWithPublicTypeParametersWithoutExtends : publicInterfaceWithPublicTypeParametersWithoutExtends new (): publicClass; >T : T >publicClass : publicClass (): publicClass; >T : T >publicClass : publicClass myMethod(): publicClass; >myMethod : () => publicClass >T : T >publicClass : publicClass } interface privateInterfaceWithPublicTypeParametersWithoutExtends { >privateInterfaceWithPublicTypeParametersWithoutExtends : privateInterfaceWithPublicTypeParametersWithoutExtends new (): publicClass; >T : T >publicClass : publicClass (): publicClass; >T : T >publicClass : publicClass myMethod(): publicClass; >myMethod : () => publicClass >T : T >publicClass : publicClass } export class publicClassWithWithPublicTypeParametersWithoutExtends { >publicClassWithWithPublicTypeParametersWithoutExtends : publicClassWithWithPublicTypeParametersWithoutExtends static myPublicStaticMethod() { >myPublicStaticMethod : () => void >T : T } private static myPrivateStaticMethod() { >myPrivateStaticMethod : () => void >T : T } myPublicMethod() { >myPublicMethod : () => void >T : T } private myPrivateMethod() { >myPrivateMethod : () => void >T : T } } class privateClassWithWithPublicTypeParametersWithoutExtends { >privateClassWithWithPublicTypeParametersWithoutExtends : privateClassWithWithPublicTypeParametersWithoutExtends static myPublicStaticMethod() { >myPublicStaticMethod : () => void >T : T } private static myPrivateStaticMethod() { >myPrivateStaticMethod : () => void >T : T } myPublicMethod() { >myPublicMethod : () => void >T : T } private myPrivateMethod() { >myPrivateMethod : () => void >T : T } } export function publicFunctionWithPublicTypeParametersWithoutExtends() { >publicFunctionWithPublicTypeParametersWithoutExtends : () => void >T : T } function privateFunctionWithPublicTypeParametersWithoutExtends() { >privateFunctionWithPublicTypeParametersWithoutExtends : () => void >T : T }