=== tests/cases/compiler/privacyTypeParametersOfInterface.ts === class privateClass { >privateClass : privateClass } export class publicClass { >publicClass : publicClass } class privateClassT { >privateClassT : privateClassT >T : T } export class publicClassT { >publicClassT : publicClassT >T : T } // TypeParameter_0_of_exported_interface_1_has_or_is_using_private_type_2 export interface publicInterfaceWithPrivateTypeParameters { >publicInterfaceWithPrivateTypeParameters : publicInterfaceWithPrivateTypeParameters >T : T >privateClass : privateClass myMethod(val: T): T; // Error >myMethod : (val: T) => T >val : T >T : T >T : T myMethod0(): publicClassT; // error >myMethod0 : () => publicClassT >publicClassT : publicClassT >T : T myMethod1(): privateClassT; // error >myMethod1 : () => privateClassT >privateClassT : privateClassT >privateClass : privateClass myMethod2(): privateClassT; // error >myMethod2 : () => privateClassT >privateClassT : privateClassT >publicClass : publicClass myMethod3(): publicClassT; //error >myMethod3 : () => publicClassT >publicClassT : publicClassT >privateClass : privateClass myMethod4(): publicClassT; // no error >myMethod4 : () => publicClassT >publicClassT : publicClassT >publicClass : publicClass } export interface publicInterfaceWithPublicTypeParameters { >publicInterfaceWithPublicTypeParameters : publicInterfaceWithPublicTypeParameters >T : T >publicClass : publicClass myMethod(val: T): T; // No Error >myMethod : (val: T) => T >val : T >T : T >T : T myMethod0(): publicClassT; // No error >myMethod0 : () => publicClassT >publicClassT : publicClassT >T : T myMethod1(): privateClassT; // error >myMethod1 : () => privateClassT >privateClassT : privateClassT >privateClass : privateClass myMethod2(): privateClassT; // error >myMethod2 : () => privateClassT >privateClassT : privateClassT >publicClass : publicClass myMethod3(): publicClassT; //error >myMethod3 : () => publicClassT >publicClassT : publicClassT >privateClass : privateClass myMethod4(): publicClassT; // no error >myMethod4 : () => publicClassT >publicClassT : publicClassT >publicClass : publicClass } interface privateInterfaceWithPrivateTypeParameters { >privateInterfaceWithPrivateTypeParameters : privateInterfaceWithPrivateTypeParameters >T : T >privateClass : privateClass myMethod(val: T): T; // No Error >myMethod : (val: T) => T >val : T >T : T >T : T myMethod0(): publicClassT; // No error >myMethod0 : () => publicClassT >publicClassT : publicClassT >T : T myMethod1(): privateClassT; // No error >myMethod1 : () => privateClassT >privateClassT : privateClassT >privateClass : privateClass myMethod2(): privateClassT; // No error >myMethod2 : () => privateClassT >privateClassT : privateClassT >publicClass : publicClass myMethod3(): publicClassT; //No error >myMethod3 : () => publicClassT >publicClassT : publicClassT >privateClass : privateClass myMethod4(): publicClassT; // no error >myMethod4 : () => publicClassT >publicClassT : publicClassT >publicClass : publicClass } interface privateInterfaceWithPublicTypeParameters { >privateInterfaceWithPublicTypeParameters : privateInterfaceWithPublicTypeParameters >T : T >publicClass : publicClass myMethod(val: T): T; // No Error >myMethod : (val: T) => T >val : T >T : T >T : T myMethod0(): publicClassT; // No error >myMethod0 : () => publicClassT >publicClassT : publicClassT >T : T myMethod1(): privateClassT; // No error >myMethod1 : () => privateClassT >privateClassT : privateClassT >privateClass : privateClass myMethod2(): privateClassT; // No error >myMethod2 : () => privateClassT >privateClassT : privateClassT >publicClass : publicClass myMethod3(): publicClassT; //No error >myMethod3 : () => publicClassT >publicClassT : publicClassT >privateClass : privateClass myMethod4(): publicClassT; // no error >myMethod4 : () => publicClassT >publicClassT : publicClassT >publicClass : publicClass } export interface publicInterfaceWithPublicTypeParametersWithoutExtends { >publicInterfaceWithPublicTypeParametersWithoutExtends : publicInterfaceWithPublicTypeParametersWithoutExtends >T : T myMethod(val: T): T; // No Error >myMethod : (val: T) => T >val : T >T : T >T : T myMethod0(): publicClassT; // No error >myMethod0 : () => publicClassT >publicClassT : publicClassT >T : T } interface privateInterfaceWithPublicTypeParametersWithoutExtends { >privateInterfaceWithPublicTypeParametersWithoutExtends : privateInterfaceWithPublicTypeParametersWithoutExtends >T : T myMethod(val: T): T; // No Error >myMethod : (val: T) => T >val : T >T : T >T : T myMethod0(): publicClassT; // No error >myMethod0 : () => publicClassT >publicClassT : publicClassT >T : T }