Report errors if the type parameter uses constraint that is using private type/module

Fixes #86
This commit is contained in:
Sheetal Nandi 2014-07-18 18:11:04 -07:00
parent 09ec1bb9ae
commit 9fd95fcb95
18 changed files with 3259 additions and 245 deletions

View File

@ -105,6 +105,22 @@ module ts {
Extends_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 2021, category: DiagnosticCategory.Error, key: "Extends clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." },
Implements_clause_of_exported_class_0_has_or_is_using_name_1_from_private_module_2: { code: 2022, category: DiagnosticCategory.Error, key: "Implements clause of exported class '{0}' has or is using name '{1}' from private module '{2}'." },
Extends_clause_of_exported_interface_0_has_or_is_using_name_1_from_private_module_2: { code: 2023, category: DiagnosticCategory.Error, key: "Extends clause of exported interface '{0}' has or is using name '{1}' from private module '{2}'." },
TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 2208, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." },
TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 2209, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of call signature from exported interface has or is using private name '{1}'." },
TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 2210, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of public static method from exported class has or is using private name '{1}'." },
TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 2211, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of public method from exported class has or is using private name '{1}'." },
TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 2212, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of method from exported interface has or is using private name '{1}'." },
TypeParameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 2213, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of exported function has or is using private name '{1}'." },
TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2214, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." },
TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2215, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." },
TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2216, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." },
TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2217, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." },
TypeParameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2218, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." },
TypeParameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 2219, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." },
TypeParameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 2220, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of exported class has or is using private name '{1}'." },
TypeParameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 2221, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of exported interface has or is using private name '{1}'." },
TypeParameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 2222, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
TypeParameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 2223, category: DiagnosticCategory.Error, key: "TypeParameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'." },
new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 2068, category: DiagnosticCategory.Error, key: "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead." },
Multiple_constructor_implementations_are_not_allowed: { code: 2070, category: DiagnosticCategory.Error, key: "Multiple constructor implementations are not allowed." },
A_class_may_only_implement_another_class_or_interface: { code: 2074, category: DiagnosticCategory.Error, key: "A class may only implement another class or interface." },

View File

@ -414,6 +414,70 @@
"category": "Error",
"code": 2023
},
"TypeParameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.": {
"category": "Error",
"code": 2208
},
"TypeParameter '{0}' of call signature from exported interface has or is using private name '{1}'.": {
"category": "Error",
"code": 2209
},
"TypeParameter '{0}' of public static method from exported class has or is using private name '{1}'.": {
"category": "Error",
"code": 2210
},
"TypeParameter '{0}' of public method from exported class has or is using private name '{1}'.": {
"category": "Error",
"code": 2211
},
"TypeParameter '{0}' of method from exported interface has or is using private name '{1}'.": {
"category": "Error",
"code": 2212
},
"TypeParameter '{0}' of exported function has or is using private name '{1}'.": {
"category": "Error",
"code": 2213
},
"TypeParameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'.": {
"category": "Error",
"code": 2214
},
"TypeParameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'.": {
"category": "Error",
"code": 2215
},
"TypeParameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'.": {
"category": "Error",
"code": 2216
},
"TypeParameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'.": {
"category": "Error",
"code": 2217
},
"TypeParameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'.": {
"category": "Error",
"code": 2218
},
"TypeParameter '{0}' of exported function has or is using name '{1}' from private module '{2}'.": {
"category": "Error",
"code": 2219
},
"TypeParameter '{0}' of exported class has or is using private name '{1}'.": {
"category": "Error",
"code": 2220
},
"TypeParameter '{0}' of exported interface has or is using private name '{1}'.": {
"category": "Error",
"code": 2221
},
"TypeParameter '{0}' of exported class has or is using name '{1}' from private module '{2}'.": {
"category": "Error",
"code": 2222
},
"TypeParameter '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": {
"category": "Error",
"code": 2223
},
"'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead.": {
"category": "Error",
"code": 2068

View File

@ -2011,10 +2011,76 @@ module ts {
function emitTypeParameters(typeParameters: TypeParameterDeclaration[]) {
function emitTypeParameter(node: TypeParameterDeclaration) {
function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult: SymbolAccessiblityResult) {
// TODO(shkamat) Cannot access name errors
var diagnosticMessage: DiagnosticMessage;
switch (node.parent.kind) {
case SyntaxKind.ClassDeclaration:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
Diagnostics.TypeParameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
Diagnostics.TypeParameter_0_of_exported_class_has_or_is_using_private_name_1;
break;
case SyntaxKind.InterfaceDeclaration:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
Diagnostics.TypeParameter_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 :
Diagnostics.TypeParameter_0_of_exported_interface_has_or_is_using_private_name_1;
break;
case SyntaxKind.ConstructSignature:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
Diagnostics.TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
Diagnostics.TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case SyntaxKind.CallSignature:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
Diagnostics.TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
Diagnostics.TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case SyntaxKind.Method:
if (node.parent.flags & NodeFlags.Static) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
Diagnostics.TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
Diagnostics.TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
}
else if (node.parent.parent.kind === SyntaxKind.ClassDeclaration) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
Diagnostics.TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
Diagnostics.TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
Diagnostics.TypeParameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
Diagnostics.TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
}
break;
case SyntaxKind.FunctionDeclaration:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ?
Diagnostics.TypeParameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 :
Diagnostics.TypeParameter_0_of_exported_function_has_or_is_using_private_name_1;
break;
default:
Debug.fail("This is unknown parent for type parameter: " + SyntaxKind[node.parent.kind]);
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
}
}
emitSourceTextOfNode(node.name);
if (node.constraint) {
write(" extends ");
getSymbolVisibilityDiagnosticMessage = getTypeParameterConstraintVisibilityError;
resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, TypeFormatFlags.None, writer);
// TODO(shkamat) This is just till we get rest of the error reporting up
getSymbolVisibilityDiagnosticMessage = undefined;
}
}
@ -2076,6 +2142,8 @@ module ts {
}
getSymbolVisibilityDiagnosticMessage = getHeritageClauseVisibilityError;
resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.WriteArrayAsGenericType, writer);
// TODO(shkamat) This is just till we get rest of the error reporting up
getSymbolVisibilityDiagnosticMessage = undefined;
}
if (typeReferences) {

View File

@ -1,136 +0,0 @@
==== tests/cases/compiler/privacyTypeParameterOfFunction.ts (1 errors) ====
class privateClass {
}
export class publicClass {
~~~~~~~~~~~~~~~~~~~~~~~~~~
}
~
!!! Cannot compile external modules unless the '--module' flag is provided.
export interface publicInterfaceWithPrivateTypeParameters {
// TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1
new <T extends privateClass>(): privateClass;
// TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1
<T extends privateClass>(): privateClass;
// TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1
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 {
// TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1
static myPublicStaticMethod<T extends 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>() {
}
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>() {
}
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>() {
}

View File

@ -0,0 +1,495 @@
==== tests/cases/compiler/privacyTypeParameterOfFunctionDeclFile.ts (28 errors) ====
class privateClass {
}
export class publicClass {
}
export interface publicInterfaceWithPrivateTypeParameters {
new <T extends privateClass>(): privateClass; // Error
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'.
<T extends privateClass>(): privateClass; // Error
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of call signature from exported interface has or is using private name 'privateClass'.
myMethod<T extends privateClass>(): privateClass; // Error
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of public static method from exported class has or is using private name 'privateClass'.
}
private static myPrivateStaticMethod<T extends privateClass>() {
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of public static method from exported class has or is using private name 'privateClass'.
}
myPublicMethod<T extends privateClass>() { // Error
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of public method from exported class has or is using private name 'privateClass'.
}
private myPrivateMethod<T extends privateClass>() {
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of public method from exported class has or is using private name '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
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of constructor signature from exported interface has or is using private name 'privateClass'.
<T extends privateClass>(): privateClass; // Error
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of call signature from exported interface has or is using private name 'privateClass'.
myMethod<T extends privateClass>(): privateClass; // Error
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of public static method from exported class has or is using private name 'privateClass'.
}
private static myPrivateStaticMethod<T extends privateClass>() {
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of public static method from exported class has or is using private name 'privateClass'.
}
myPublicMethod<T extends privateClass>() { // Error
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of public method from exported class has or is using private name 'privateClass'.
}
private myPrivateMethod<T extends privateClass>() {
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of public method from exported class has or is using private name '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
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter '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>() {
}
}

View File

@ -0,0 +1,816 @@
//// [privacyTypeParameterOfFunctionDeclFile.ts]
class privateClass {
}
export class publicClass {
}
export interface publicInterfaceWithPrivateTypeParameters {
new <T extends privateClass>(): privateClass; // Error
<T extends privateClass>(): privateClass; // Error
myMethod<T extends privateClass>(): privateClass; // Error
}
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
}
private static myPrivateStaticMethod<T extends privateClass>() {
}
myPublicMethod<T extends privateClass>() { // Error
}
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
}
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
<T extends privateModule.publicClass>(): privateModule.publicClass; // Error
myMethod<T extends privateModule.publicClass>(): privateModule.publicClass; // Error
}
export class publicClassWithWithPrivateModuleTypeParameters {
static myPublicStaticMethod<T extends privateModule.publicClass>() { // Error
}
myPublicMethod<T extends privateModule.publicClass>() { // Error
}
}
export function publicFunctionWithPrivateMopduleTypeParameters<T extends privateModule.publicClass>() { // Error
}
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
<T extends privateClass>(): privateClass; // Error
myMethod<T extends privateClass>(): privateClass; // Error
}
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
}
private static myPrivateStaticMethod<T extends privateClass>() {
}
myPublicMethod<T extends privateClass>() { // Error
}
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
}
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
<T extends privateModule.publicClass>(): privateModule.publicClass; // Error
myMethod<T extends privateModule.publicClass>(): privateModule.publicClass; // Error
}
export class publicClassWithWithPrivateModuleTypeParameters {
static myPublicStaticMethod<T extends privateModule.publicClass>() { // Error
}
myPublicMethod<T extends privateModule.publicClass>() { // Error
}
}
export function publicFunctionWithPrivateMopduleTypeParameters<T extends privateModule.publicClass>() { // Error
}
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>() {
}
}
//// [privacyTypeParameterOfFunctionDeclFile.js]
var privateClass = (function () {
function privateClass() {
}
return privateClass;
})();
var publicClass = (function () {
function publicClass() {
}
return publicClass;
})();
exports.publicClass = publicClass;
var publicClassWithWithPrivateTypeParameters = (function () {
function publicClassWithWithPrivateTypeParameters() {
}
publicClassWithWithPrivateTypeParameters.myPublicStaticMethod = function () {
};
publicClassWithWithPrivateTypeParameters.myPrivateStaticMethod = function () {
};
publicClassWithWithPrivateTypeParameters.prototype.myPublicMethod = function () {
};
publicClassWithWithPrivateTypeParameters.prototype.myPrivateMethod = function () {
};
return publicClassWithWithPrivateTypeParameters;
})();
exports.publicClassWithWithPrivateTypeParameters = publicClassWithWithPrivateTypeParameters;
var publicClassWithWithPublicTypeParameters = (function () {
function publicClassWithWithPublicTypeParameters() {
}
publicClassWithWithPublicTypeParameters.myPublicStaticMethod = function () {
};
publicClassWithWithPublicTypeParameters.myPrivateStaticMethod = function () {
};
publicClassWithWithPublicTypeParameters.prototype.myPublicMethod = function () {
};
publicClassWithWithPublicTypeParameters.prototype.myPrivateMethod = function () {
};
return publicClassWithWithPublicTypeParameters;
})();
exports.publicClassWithWithPublicTypeParameters = publicClassWithWithPublicTypeParameters;
var privateClassWithWithPrivateTypeParameters = (function () {
function privateClassWithWithPrivateTypeParameters() {
}
privateClassWithWithPrivateTypeParameters.myPublicStaticMethod = function () {
};
privateClassWithWithPrivateTypeParameters.myPrivateStaticMethod = function () {
};
privateClassWithWithPrivateTypeParameters.prototype.myPublicMethod = function () {
};
privateClassWithWithPrivateTypeParameters.prototype.myPrivateMethod = function () {
};
return privateClassWithWithPrivateTypeParameters;
})();
var privateClassWithWithPublicTypeParameters = (function () {
function privateClassWithWithPublicTypeParameters() {
}
privateClassWithWithPublicTypeParameters.myPublicStaticMethod = function () {
};
privateClassWithWithPublicTypeParameters.myPrivateStaticMethod = function () {
};
privateClassWithWithPublicTypeParameters.prototype.myPublicMethod = function () {
};
privateClassWithWithPublicTypeParameters.prototype.myPrivateMethod = function () {
};
return privateClassWithWithPublicTypeParameters;
})();
function publicFunctionWithPrivateTypeParameters() {
}
exports.publicFunctionWithPrivateTypeParameters = publicFunctionWithPrivateTypeParameters;
function publicFunctionWithPublicTypeParameters() {
}
exports.publicFunctionWithPublicTypeParameters = publicFunctionWithPublicTypeParameters;
function privateFunctionWithPrivateTypeParameters() {
}
function privateFunctionWithPublicTypeParameters() {
}
var publicClassWithWithPublicTypeParametersWithoutExtends = (function () {
function publicClassWithWithPublicTypeParametersWithoutExtends() {
}
publicClassWithWithPublicTypeParametersWithoutExtends.myPublicStaticMethod = function () {
};
publicClassWithWithPublicTypeParametersWithoutExtends.myPrivateStaticMethod = function () {
};
publicClassWithWithPublicTypeParametersWithoutExtends.prototype.myPublicMethod = function () {
};
publicClassWithWithPublicTypeParametersWithoutExtends.prototype.myPrivateMethod = function () {
};
return publicClassWithWithPublicTypeParametersWithoutExtends;
})();
exports.publicClassWithWithPublicTypeParametersWithoutExtends = publicClassWithWithPublicTypeParametersWithoutExtends;
var privateClassWithWithPublicTypeParametersWithoutExtends = (function () {
function privateClassWithWithPublicTypeParametersWithoutExtends() {
}
privateClassWithWithPublicTypeParametersWithoutExtends.myPublicStaticMethod = function () {
};
privateClassWithWithPublicTypeParametersWithoutExtends.myPrivateStaticMethod = function () {
};
privateClassWithWithPublicTypeParametersWithoutExtends.prototype.myPublicMethod = function () {
};
privateClassWithWithPublicTypeParametersWithoutExtends.prototype.myPrivateMethod = function () {
};
return privateClassWithWithPublicTypeParametersWithoutExtends;
})();
function publicFunctionWithPublicTypeParametersWithoutExtends() {
}
exports.publicFunctionWithPublicTypeParametersWithoutExtends = publicFunctionWithPublicTypeParametersWithoutExtends;
function privateFunctionWithPublicTypeParametersWithoutExtends() {
}
var publicClassWithWithPrivateModuleTypeParameters = (function () {
function publicClassWithWithPrivateModuleTypeParameters() {
}
publicClassWithWithPrivateModuleTypeParameters.myPublicStaticMethod = function () {
};
publicClassWithWithPrivateModuleTypeParameters.prototype.myPublicMethod = function () {
};
return publicClassWithWithPrivateModuleTypeParameters;
})();
exports.publicClassWithWithPrivateModuleTypeParameters = publicClassWithWithPrivateModuleTypeParameters;
function publicFunctionWithPrivateMopduleTypeParameters() {
}
exports.publicFunctionWithPrivateMopduleTypeParameters = publicFunctionWithPrivateMopduleTypeParameters;
var privateClassWithWithPrivateModuleTypeParameters = (function () {
function privateClassWithWithPrivateModuleTypeParameters() {
}
privateClassWithWithPrivateModuleTypeParameters.myPublicStaticMethod = function () {
};
privateClassWithWithPrivateModuleTypeParameters.prototype.myPublicMethod = function () {
};
return privateClassWithWithPrivateModuleTypeParameters;
})();
function privateFunctionWithPrivateMopduleTypeParameters() {
}
(function (publicModule) {
var privateClass = (function () {
function privateClass() {
}
return privateClass;
})();
var publicClass = (function () {
function publicClass() {
}
return publicClass;
})();
publicModule.publicClass = publicClass;
var publicClassWithWithPrivateTypeParameters = (function () {
function publicClassWithWithPrivateTypeParameters() {
}
publicClassWithWithPrivateTypeParameters.myPublicStaticMethod = function () {
};
publicClassWithWithPrivateTypeParameters.myPrivateStaticMethod = function () {
};
publicClassWithWithPrivateTypeParameters.prototype.myPublicMethod = function () {
};
publicClassWithWithPrivateTypeParameters.prototype.myPrivateMethod = function () {
};
return publicClassWithWithPrivateTypeParameters;
})();
publicModule.publicClassWithWithPrivateTypeParameters = publicClassWithWithPrivateTypeParameters;
var publicClassWithWithPublicTypeParameters = (function () {
function publicClassWithWithPublicTypeParameters() {
}
publicClassWithWithPublicTypeParameters.myPublicStaticMethod = function () {
};
publicClassWithWithPublicTypeParameters.myPrivateStaticMethod = function () {
};
publicClassWithWithPublicTypeParameters.prototype.myPublicMethod = function () {
};
publicClassWithWithPublicTypeParameters.prototype.myPrivateMethod = function () {
};
return publicClassWithWithPublicTypeParameters;
})();
publicModule.publicClassWithWithPublicTypeParameters = publicClassWithWithPublicTypeParameters;
var privateClassWithWithPrivateTypeParameters = (function () {
function privateClassWithWithPrivateTypeParameters() {
}
privateClassWithWithPrivateTypeParameters.myPublicStaticMethod = function () {
};
privateClassWithWithPrivateTypeParameters.myPrivateStaticMethod = function () {
};
privateClassWithWithPrivateTypeParameters.prototype.myPublicMethod = function () {
};
privateClassWithWithPrivateTypeParameters.prototype.myPrivateMethod = function () {
};
return privateClassWithWithPrivateTypeParameters;
})();
var privateClassWithWithPublicTypeParameters = (function () {
function privateClassWithWithPublicTypeParameters() {
}
privateClassWithWithPublicTypeParameters.myPublicStaticMethod = function () {
};
privateClassWithWithPublicTypeParameters.myPrivateStaticMethod = function () {
};
privateClassWithWithPublicTypeParameters.prototype.myPublicMethod = function () {
};
privateClassWithWithPublicTypeParameters.prototype.myPrivateMethod = function () {
};
return privateClassWithWithPublicTypeParameters;
})();
function publicFunctionWithPrivateTypeParameters() {
}
publicModule.publicFunctionWithPrivateTypeParameters = publicFunctionWithPrivateTypeParameters;
function publicFunctionWithPublicTypeParameters() {
}
publicModule.publicFunctionWithPublicTypeParameters = publicFunctionWithPublicTypeParameters;
function privateFunctionWithPrivateTypeParameters() {
}
function privateFunctionWithPublicTypeParameters() {
}
var publicClassWithWithPublicTypeParametersWithoutExtends = (function () {
function publicClassWithWithPublicTypeParametersWithoutExtends() {
}
publicClassWithWithPublicTypeParametersWithoutExtends.myPublicStaticMethod = function () {
};
publicClassWithWithPublicTypeParametersWithoutExtends.myPrivateStaticMethod = function () {
};
publicClassWithWithPublicTypeParametersWithoutExtends.prototype.myPublicMethod = function () {
};
publicClassWithWithPublicTypeParametersWithoutExtends.prototype.myPrivateMethod = function () {
};
return publicClassWithWithPublicTypeParametersWithoutExtends;
})();
publicModule.publicClassWithWithPublicTypeParametersWithoutExtends = publicClassWithWithPublicTypeParametersWithoutExtends;
var privateClassWithWithPublicTypeParametersWithoutExtends = (function () {
function privateClassWithWithPublicTypeParametersWithoutExtends() {
}
privateClassWithWithPublicTypeParametersWithoutExtends.myPublicStaticMethod = function () {
};
privateClassWithWithPublicTypeParametersWithoutExtends.myPrivateStaticMethod = function () {
};
privateClassWithWithPublicTypeParametersWithoutExtends.prototype.myPublicMethod = function () {
};
privateClassWithWithPublicTypeParametersWithoutExtends.prototype.myPrivateMethod = function () {
};
return privateClassWithWithPublicTypeParametersWithoutExtends;
})();
function publicFunctionWithPublicTypeParametersWithoutExtends() {
}
publicModule.publicFunctionWithPublicTypeParametersWithoutExtends = publicFunctionWithPublicTypeParametersWithoutExtends;
function privateFunctionWithPublicTypeParametersWithoutExtends() {
}
var publicClassWithWithPrivateModuleTypeParameters = (function () {
function publicClassWithWithPrivateModuleTypeParameters() {
}
publicClassWithWithPrivateModuleTypeParameters.myPublicStaticMethod = function () {
};
publicClassWithWithPrivateModuleTypeParameters.prototype.myPublicMethod = function () {
};
return publicClassWithWithPrivateModuleTypeParameters;
})();
publicModule.publicClassWithWithPrivateModuleTypeParameters = publicClassWithWithPrivateModuleTypeParameters;
function publicFunctionWithPrivateMopduleTypeParameters() {
}
publicModule.publicFunctionWithPrivateMopduleTypeParameters = publicFunctionWithPrivateMopduleTypeParameters;
var privateClassWithWithPrivateModuleTypeParameters = (function () {
function privateClassWithWithPrivateModuleTypeParameters() {
}
privateClassWithWithPrivateModuleTypeParameters.myPublicStaticMethod = function () {
};
privateClassWithWithPrivateModuleTypeParameters.prototype.myPublicMethod = function () {
};
return privateClassWithWithPrivateModuleTypeParameters;
})();
function privateFunctionWithPrivateMopduleTypeParameters() {
}
})(exports.publicModule || (exports.publicModule = {}));
var publicModule = exports.publicModule;
var privateModule;
(function (privateModule) {
var privateClass = (function () {
function privateClass() {
}
return privateClass;
})();
var publicClass = (function () {
function publicClass() {
}
return publicClass;
})();
privateModule.publicClass = publicClass;
var publicClassWithWithPrivateTypeParameters = (function () {
function publicClassWithWithPrivateTypeParameters() {
}
publicClassWithWithPrivateTypeParameters.myPublicStaticMethod = function () {
};
publicClassWithWithPrivateTypeParameters.myPrivateStaticMethod = function () {
};
publicClassWithWithPrivateTypeParameters.prototype.myPublicMethod = function () {
};
publicClassWithWithPrivateTypeParameters.prototype.myPrivateMethod = function () {
};
return publicClassWithWithPrivateTypeParameters;
})();
privateModule.publicClassWithWithPrivateTypeParameters = publicClassWithWithPrivateTypeParameters;
var publicClassWithWithPublicTypeParameters = (function () {
function publicClassWithWithPublicTypeParameters() {
}
publicClassWithWithPublicTypeParameters.myPublicStaticMethod = function () {
};
publicClassWithWithPublicTypeParameters.myPrivateStaticMethod = function () {
};
publicClassWithWithPublicTypeParameters.prototype.myPublicMethod = function () {
};
publicClassWithWithPublicTypeParameters.prototype.myPrivateMethod = function () {
};
return publicClassWithWithPublicTypeParameters;
})();
privateModule.publicClassWithWithPublicTypeParameters = publicClassWithWithPublicTypeParameters;
var privateClassWithWithPrivateTypeParameters = (function () {
function privateClassWithWithPrivateTypeParameters() {
}
privateClassWithWithPrivateTypeParameters.myPublicStaticMethod = function () {
};
privateClassWithWithPrivateTypeParameters.myPrivateStaticMethod = function () {
};
privateClassWithWithPrivateTypeParameters.prototype.myPublicMethod = function () {
};
privateClassWithWithPrivateTypeParameters.prototype.myPrivateMethod = function () {
};
return privateClassWithWithPrivateTypeParameters;
})();
var privateClassWithWithPublicTypeParameters = (function () {
function privateClassWithWithPublicTypeParameters() {
}
privateClassWithWithPublicTypeParameters.myPublicStaticMethod = function () {
};
privateClassWithWithPublicTypeParameters.myPrivateStaticMethod = function () {
};
privateClassWithWithPublicTypeParameters.prototype.myPublicMethod = function () {
};
privateClassWithWithPublicTypeParameters.prototype.myPrivateMethod = function () {
};
return privateClassWithWithPublicTypeParameters;
})();
function publicFunctionWithPrivateTypeParameters() {
}
privateModule.publicFunctionWithPrivateTypeParameters = publicFunctionWithPrivateTypeParameters;
function publicFunctionWithPublicTypeParameters() {
}
privateModule.publicFunctionWithPublicTypeParameters = publicFunctionWithPublicTypeParameters;
function privateFunctionWithPrivateTypeParameters() {
}
function privateFunctionWithPublicTypeParameters() {
}
var publicClassWithWithPublicTypeParametersWithoutExtends = (function () {
function publicClassWithWithPublicTypeParametersWithoutExtends() {
}
publicClassWithWithPublicTypeParametersWithoutExtends.myPublicStaticMethod = function () {
};
publicClassWithWithPublicTypeParametersWithoutExtends.myPrivateStaticMethod = function () {
};
publicClassWithWithPublicTypeParametersWithoutExtends.prototype.myPublicMethod = function () {
};
publicClassWithWithPublicTypeParametersWithoutExtends.prototype.myPrivateMethod = function () {
};
return publicClassWithWithPublicTypeParametersWithoutExtends;
})();
privateModule.publicClassWithWithPublicTypeParametersWithoutExtends = publicClassWithWithPublicTypeParametersWithoutExtends;
var privateClassWithWithPublicTypeParametersWithoutExtends = (function () {
function privateClassWithWithPublicTypeParametersWithoutExtends() {
}
privateClassWithWithPublicTypeParametersWithoutExtends.myPublicStaticMethod = function () {
};
privateClassWithWithPublicTypeParametersWithoutExtends.myPrivateStaticMethod = function () {
};
privateClassWithWithPublicTypeParametersWithoutExtends.prototype.myPublicMethod = function () {
};
privateClassWithWithPublicTypeParametersWithoutExtends.prototype.myPrivateMethod = function () {
};
return privateClassWithWithPublicTypeParametersWithoutExtends;
})();
function publicFunctionWithPublicTypeParametersWithoutExtends() {
}
privateModule.publicFunctionWithPublicTypeParametersWithoutExtends = publicFunctionWithPublicTypeParametersWithoutExtends;
function privateFunctionWithPublicTypeParametersWithoutExtends() {
}
})(privateModule || (privateModule = {}));

View File

@ -1,47 +0,0 @@
==== tests/cases/compiler/privacyTypeParametersOfClass.ts (1 errors) ====
class privateClass {
}
export class publicClass {
~~~~~~~~~~~~~~~~~~~~~~~~~~
}
~
!!! Cannot compile external modules unless the '--module' flag is provided.
// TypeParameter_0_of_exported_class_1_has_or_is_using_private_type_2
export class publicClassWithPrivateTypeParameters<T extends privateClass> {
myMethod(val: T): T { // Error
return val;
}
}
export class publicClassWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T { // No Error
return val;
}
}
class privateClassWithPrivateTypeParameters<T extends privateClass> {
myMethod(val: T): T { // No Error
return val;
}
}
class privateClassWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T { // No Error
return val;
}
}
export class publicClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T { // No Error
return val;
}
}
class privateClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T { // No Error
return val;
}
}

View File

@ -0,0 +1,163 @@
==== tests/cases/compiler/privacyTypeParametersOfClassDeclFile.ts (4 errors) ====
class privateClass {
}
export class publicClass {
}
export class publicClassWithPrivateTypeParameters<T extends privateClass> { // Error
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of exported class has or is using private name 'privateClass'.
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPrivateTypeParameters<T extends privateClass> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> { // Error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of exported class has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'.
myMethod(val: T): T {
return val;
}
}
class privateClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
export module publicModule {
class privateClassInPublicModule {
}
export class publicClassInPublicModule {
}
export class publicClassWithPrivateTypeParameters<T extends privateClassInPublicModule> { // Error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of exported class has or is using private name 'privateClassInPublicModule'.
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPrivateTypeParameters<T extends privateClassInPublicModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> { // Error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of exported class has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'.
myMethod(val: T): T {
return val;
}
}
class privateClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
}
module privateModule {
class privateClassInPrivateModule {
}
export class publicClassInPrivateModule {
}
export class publicClassWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
}

View File

@ -0,0 +1,383 @@
//// [privacyTypeParametersOfClassDeclFile.ts]
class privateClass {
}
export class publicClass {
}
export class publicClassWithPrivateTypeParameters<T extends privateClass> { // Error
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPrivateTypeParameters<T extends privateClass> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> { // Error
myMethod(val: T): T {
return val;
}
}
class privateClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
export module publicModule {
class privateClassInPublicModule {
}
export class publicClassInPublicModule {
}
export class publicClassWithPrivateTypeParameters<T extends privateClassInPublicModule> { // Error
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPrivateTypeParameters<T extends privateClassInPublicModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> { // Error
myMethod(val: T): T {
return val;
}
}
class privateClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
}
module privateModule {
class privateClassInPrivateModule {
}
export class publicClassInPrivateModule {
}
export class publicClassWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
}
//// [privacyTypeParametersOfClassDeclFile.js]
var privateClass = (function () {
function privateClass() {
}
return privateClass;
})();
var publicClass = (function () {
function publicClass() {
}
return publicClass;
})();
exports.publicClass = publicClass;
var publicClassWithPrivateTypeParameters = (function () {
function publicClassWithPrivateTypeParameters() {
}
publicClassWithPrivateTypeParameters.prototype.myMethod = function (val) {
return val;
};
return publicClassWithPrivateTypeParameters;
})();
exports.publicClassWithPrivateTypeParameters = publicClassWithPrivateTypeParameters;
var publicClassWithPublicTypeParameters = (function () {
function publicClassWithPublicTypeParameters() {
}
publicClassWithPublicTypeParameters.prototype.myMethod = function (val) {
return val;
};
return publicClassWithPublicTypeParameters;
})();
exports.publicClassWithPublicTypeParameters = publicClassWithPublicTypeParameters;
var privateClassWithPrivateTypeParameters = (function () {
function privateClassWithPrivateTypeParameters() {
}
privateClassWithPrivateTypeParameters.prototype.myMethod = function (val) {
return val;
};
return privateClassWithPrivateTypeParameters;
})();
var privateClassWithPublicTypeParameters = (function () {
function privateClassWithPublicTypeParameters() {
}
privateClassWithPublicTypeParameters.prototype.myMethod = function (val) {
return val;
};
return privateClassWithPublicTypeParameters;
})();
var publicClassWithPublicTypeParametersWithoutExtends = (function () {
function publicClassWithPublicTypeParametersWithoutExtends() {
}
publicClassWithPublicTypeParametersWithoutExtends.prototype.myMethod = function (val) {
return val;
};
return publicClassWithPublicTypeParametersWithoutExtends;
})();
exports.publicClassWithPublicTypeParametersWithoutExtends = publicClassWithPublicTypeParametersWithoutExtends;
var privateClassWithPublicTypeParametersWithoutExtends = (function () {
function privateClassWithPublicTypeParametersWithoutExtends() {
}
privateClassWithPublicTypeParametersWithoutExtends.prototype.myMethod = function (val) {
return val;
};
return privateClassWithPublicTypeParametersWithoutExtends;
})();
var publicClassWithTypeParametersFromPrivateModule = (function () {
function publicClassWithTypeParametersFromPrivateModule() {
}
publicClassWithTypeParametersFromPrivateModule.prototype.myMethod = function (val) {
return val;
};
return publicClassWithTypeParametersFromPrivateModule;
})();
exports.publicClassWithTypeParametersFromPrivateModule = publicClassWithTypeParametersFromPrivateModule;
var privateClassWithTypeParametersFromPrivateModule = (function () {
function privateClassWithTypeParametersFromPrivateModule() {
}
privateClassWithTypeParametersFromPrivateModule.prototype.myMethod = function (val) {
return val;
};
return privateClassWithTypeParametersFromPrivateModule;
})();
(function (publicModule) {
var privateClassInPublicModule = (function () {
function privateClassInPublicModule() {
}
return privateClassInPublicModule;
})();
var publicClassInPublicModule = (function () {
function publicClassInPublicModule() {
}
return publicClassInPublicModule;
})();
publicModule.publicClassInPublicModule = publicClassInPublicModule;
var publicClassWithPrivateTypeParameters = (function () {
function publicClassWithPrivateTypeParameters() {
}
publicClassWithPrivateTypeParameters.prototype.myMethod = function (val) {
return val;
};
return publicClassWithPrivateTypeParameters;
})();
publicModule.publicClassWithPrivateTypeParameters = publicClassWithPrivateTypeParameters;
var publicClassWithPublicTypeParameters = (function () {
function publicClassWithPublicTypeParameters() {
}
publicClassWithPublicTypeParameters.prototype.myMethod = function (val) {
return val;
};
return publicClassWithPublicTypeParameters;
})();
publicModule.publicClassWithPublicTypeParameters = publicClassWithPublicTypeParameters;
var privateClassWithPrivateTypeParameters = (function () {
function privateClassWithPrivateTypeParameters() {
}
privateClassWithPrivateTypeParameters.prototype.myMethod = function (val) {
return val;
};
return privateClassWithPrivateTypeParameters;
})();
var privateClassWithPublicTypeParameters = (function () {
function privateClassWithPublicTypeParameters() {
}
privateClassWithPublicTypeParameters.prototype.myMethod = function (val) {
return val;
};
return privateClassWithPublicTypeParameters;
})();
var publicClassWithPublicTypeParametersWithoutExtends = (function () {
function publicClassWithPublicTypeParametersWithoutExtends() {
}
publicClassWithPublicTypeParametersWithoutExtends.prototype.myMethod = function (val) {
return val;
};
return publicClassWithPublicTypeParametersWithoutExtends;
})();
publicModule.publicClassWithPublicTypeParametersWithoutExtends = publicClassWithPublicTypeParametersWithoutExtends;
var privateClassWithPublicTypeParametersWithoutExtends = (function () {
function privateClassWithPublicTypeParametersWithoutExtends() {
}
privateClassWithPublicTypeParametersWithoutExtends.prototype.myMethod = function (val) {
return val;
};
return privateClassWithPublicTypeParametersWithoutExtends;
})();
var publicClassWithTypeParametersFromPrivateModule = (function () {
function publicClassWithTypeParametersFromPrivateModule() {
}
publicClassWithTypeParametersFromPrivateModule.prototype.myMethod = function (val) {
return val;
};
return publicClassWithTypeParametersFromPrivateModule;
})();
publicModule.publicClassWithTypeParametersFromPrivateModule = publicClassWithTypeParametersFromPrivateModule;
var privateClassWithTypeParametersFromPrivateModule = (function () {
function privateClassWithTypeParametersFromPrivateModule() {
}
privateClassWithTypeParametersFromPrivateModule.prototype.myMethod = function (val) {
return val;
};
return privateClassWithTypeParametersFromPrivateModule;
})();
})(exports.publicModule || (exports.publicModule = {}));
var publicModule = exports.publicModule;
var privateModule;
(function (privateModule) {
var privateClassInPrivateModule = (function () {
function privateClassInPrivateModule() {
}
return privateClassInPrivateModule;
})();
var publicClassInPrivateModule = (function () {
function publicClassInPrivateModule() {
}
return publicClassInPrivateModule;
})();
privateModule.publicClassInPrivateModule = publicClassInPrivateModule;
var publicClassWithPrivateTypeParameters = (function () {
function publicClassWithPrivateTypeParameters() {
}
publicClassWithPrivateTypeParameters.prototype.myMethod = function (val) {
return val;
};
return publicClassWithPrivateTypeParameters;
})();
privateModule.publicClassWithPrivateTypeParameters = publicClassWithPrivateTypeParameters;
var publicClassWithPublicTypeParameters = (function () {
function publicClassWithPublicTypeParameters() {
}
publicClassWithPublicTypeParameters.prototype.myMethod = function (val) {
return val;
};
return publicClassWithPublicTypeParameters;
})();
privateModule.publicClassWithPublicTypeParameters = publicClassWithPublicTypeParameters;
var privateClassWithPrivateTypeParameters = (function () {
function privateClassWithPrivateTypeParameters() {
}
privateClassWithPrivateTypeParameters.prototype.myMethod = function (val) {
return val;
};
return privateClassWithPrivateTypeParameters;
})();
var privateClassWithPublicTypeParameters = (function () {
function privateClassWithPublicTypeParameters() {
}
privateClassWithPublicTypeParameters.prototype.myMethod = function (val) {
return val;
};
return privateClassWithPublicTypeParameters;
})();
var publicClassWithPublicTypeParametersWithoutExtends = (function () {
function publicClassWithPublicTypeParametersWithoutExtends() {
}
publicClassWithPublicTypeParametersWithoutExtends.prototype.myMethod = function (val) {
return val;
};
return publicClassWithPublicTypeParametersWithoutExtends;
})();
privateModule.publicClassWithPublicTypeParametersWithoutExtends = publicClassWithPublicTypeParametersWithoutExtends;
var privateClassWithPublicTypeParametersWithoutExtends = (function () {
function privateClassWithPublicTypeParametersWithoutExtends() {
}
privateClassWithPublicTypeParametersWithoutExtends.prototype.myMethod = function (val) {
return val;
};
return privateClassWithPublicTypeParametersWithoutExtends;
})();
})(privateModule || (privateModule = {}));

View File

@ -1,62 +0,0 @@
==== tests/cases/compiler/privacyTypeParametersOfInterface.ts (1 errors) ====
class privateClass {
}
export class publicClass {
~~~~~~~~~~~~~~~~~~~~~~~~~~
}
~
!!! Cannot compile external modules unless the '--module' flag is provided.
class privateClassT<T> {
}
export class publicClassT<T> {
}
// TypeParameter_0_of_exported_interface_1_has_or_is_using_private_type_2
export interface publicInterfaceWithPrivateTypeParameters<T extends privateClass> {
myMethod(val: T): T; // Error
myMethod0(): publicClassT<T>; // error
myMethod1(): privateClassT<privateClass>; // error
myMethod2(): privateClassT<publicClass>; // error
myMethod3(): publicClassT<privateClass>; //error
myMethod4(): publicClassT<publicClass>; // no error
}
export interface publicInterfaceWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T; // No Error
myMethod0(): publicClassT<T>; // No error
myMethod1(): privateClassT<privateClass>; // error
myMethod2(): privateClassT<publicClass>; // error
myMethod3(): publicClassT<privateClass>; //error
myMethod4(): publicClassT<publicClass>; // no error
}
interface privateInterfaceWithPrivateTypeParameters<T extends privateClass> {
myMethod(val: T): T; // No Error
myMethod0(): publicClassT<T>; // No error
myMethod1(): privateClassT<privateClass>; // No error
myMethod2(): privateClassT<publicClass>; // No error
myMethod3(): publicClassT<privateClass>; //No error
myMethod4(): publicClassT<publicClass>; // no error
}
interface privateInterfaceWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T; // No Error
myMethod0(): publicClassT<T>; // No error
myMethod1(): privateClassT<privateClass>; // No error
myMethod2(): privateClassT<publicClass>; // No error
myMethod3(): publicClassT<privateClass>; //No error
myMethod4(): publicClassT<publicClass>; // no error
}
export interface publicInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T; // No Error
myMethod0(): publicClassT<T>; // No error
}
interface privateInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T; // No Error
myMethod0(): publicClassT<T>; // No error
}

View File

@ -0,0 +1,199 @@
==== tests/cases/compiler/privacyTypeParametersOfInterfaceDeclFile.ts (4 errors) ====
class privateClass {
}
export class publicClass {
}
class privateClassT<T> {
}
export class publicClassT<T> {
}
export interface publicInterfaceWithPrivateTypeParameters<T extends privateClass> { // Error
~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of exported interface has or is using private name 'privateClass'.
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
export interface publicInterfaceWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
interface privateInterfaceWithPrivateTypeParameters<T extends privateClass> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
interface privateInterfaceWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
export interface publicInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
}
interface privateInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
}
export interface publicInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of exported interface has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'.
}
interface privateInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
}
export module publicModule {
class privateClassInPublicModule {
}
export class publicClassInPublicModule {
}
class privateClassInPublicModuleT<T> {
}
export class publicClassInPublicModuleT<T> {
}
export interface publicInterfaceWithPrivateTypeParameters<T extends privateClassInPublicModule> { // Error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of exported interface has or is using private name 'privateClassInPublicModule'.
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
export interface publicInterfaceWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
interface privateInterfaceWithPrivateTypeParameters<T extends privateClassInPublicModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
interface privateInterfaceWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
export interface publicInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
}
interface privateInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
}
export interface publicInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! TypeParameter 'T' of exported interface has or is using name 'privateModule.publicClassInPrivateModule' from private module 'privateModule'.
}
interface privateInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
}
}
module privateModule {
class privateClassInPrivateModule {
}
export class publicClassInPrivateModule {
}
class privateClassInPrivateModuleT<T> {
}
export class publicClassInPrivateModuleT<T> {
}
export interface publicInterfaceWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
export interface publicInterfaceWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
interface privateInterfaceWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
interface privateInterfaceWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
export interface publicInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
}
interface privateInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
}
}

View File

@ -0,0 +1,265 @@
//// [privacyTypeParametersOfInterfaceDeclFile.ts]
class privateClass {
}
export class publicClass {
}
class privateClassT<T> {
}
export class publicClassT<T> {
}
export interface publicInterfaceWithPrivateTypeParameters<T extends privateClass> { // Error
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
export interface publicInterfaceWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
interface privateInterfaceWithPrivateTypeParameters<T extends privateClass> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
interface privateInterfaceWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
export interface publicInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
}
interface privateInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
}
export interface publicInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
}
interface privateInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
}
export module publicModule {
class privateClassInPublicModule {
}
export class publicClassInPublicModule {
}
class privateClassInPublicModuleT<T> {
}
export class publicClassInPublicModuleT<T> {
}
export interface publicInterfaceWithPrivateTypeParameters<T extends privateClassInPublicModule> { // Error
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
export interface publicInterfaceWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
interface privateInterfaceWithPrivateTypeParameters<T extends privateClassInPublicModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
interface privateInterfaceWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
export interface publicInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
}
interface privateInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
}
export interface publicInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
}
interface privateInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
}
}
module privateModule {
class privateClassInPrivateModule {
}
export class publicClassInPrivateModule {
}
class privateClassInPrivateModuleT<T> {
}
export class publicClassInPrivateModuleT<T> {
}
export interface publicInterfaceWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
export interface publicInterfaceWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
interface privateInterfaceWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
interface privateInterfaceWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
export interface publicInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
}
interface privateInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
}
}
//// [privacyTypeParametersOfInterfaceDeclFile.js]
var privateClass = (function () {
function privateClass() {
}
return privateClass;
})();
var publicClass = (function () {
function publicClass() {
}
return publicClass;
})();
exports.publicClass = publicClass;
var privateClassT = (function () {
function privateClassT() {
}
return privateClassT;
})();
var publicClassT = (function () {
function publicClassT() {
}
return publicClassT;
})();
exports.publicClassT = publicClassT;
(function (publicModule) {
var privateClassInPublicModule = (function () {
function privateClassInPublicModule() {
}
return privateClassInPublicModule;
})();
var publicClassInPublicModule = (function () {
function publicClassInPublicModule() {
}
return publicClassInPublicModule;
})();
publicModule.publicClassInPublicModule = publicClassInPublicModule;
var privateClassInPublicModuleT = (function () {
function privateClassInPublicModuleT() {
}
return privateClassInPublicModuleT;
})();
var publicClassInPublicModuleT = (function () {
function publicClassInPublicModuleT() {
}
return publicClassInPublicModuleT;
})();
publicModule.publicClassInPublicModuleT = publicClassInPublicModuleT;
})(exports.publicModule || (exports.publicModule = {}));
var publicModule = exports.publicModule;
var privateModule;
(function (privateModule) {
var privateClassInPrivateModule = (function () {
function privateClassInPrivateModule() {
}
return privateClassInPrivateModule;
})();
var publicClassInPrivateModule = (function () {
function publicClassInPrivateModule() {
}
return publicClassInPrivateModule;
})();
privateModule.publicClassInPrivateModule = publicClassInPrivateModule;
var privateClassInPrivateModuleT = (function () {
function privateClassInPrivateModuleT() {
}
return privateClassInPrivateModuleT;
})();
var publicClassInPrivateModuleT = (function () {
function publicClassInPrivateModuleT() {
}
return publicClassInPrivateModuleT;
})();
privateModule.publicClassInPrivateModuleT = publicClassInPrivateModuleT;
})(privateModule || (privateModule = {}));

View File

@ -1,3 +1,4 @@
// @module: commonjs
class privateClass {
}

View File

@ -0,0 +1,440 @@
// @module: commonjs
// @declaration: true
class privateClass {
}
export class publicClass {
}
export interface publicInterfaceWithPrivateTypeParameters {
new <T extends privateClass>(): privateClass; // Error
<T extends privateClass>(): privateClass; // Error
myMethod<T extends privateClass>(): privateClass; // Error
}
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
}
private static myPrivateStaticMethod<T extends privateClass>() {
}
myPublicMethod<T extends privateClass>() { // Error
}
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
}
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
<T extends privateModule.publicClass>(): privateModule.publicClass; // Error
myMethod<T extends privateModule.publicClass>(): privateModule.publicClass; // Error
}
export class publicClassWithWithPrivateModuleTypeParameters {
static myPublicStaticMethod<T extends privateModule.publicClass>() { // Error
}
myPublicMethod<T extends privateModule.publicClass>() { // Error
}
}
export function publicFunctionWithPrivateMopduleTypeParameters<T extends privateModule.publicClass>() { // Error
}
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
<T extends privateClass>(): privateClass; // Error
myMethod<T extends privateClass>(): privateClass; // Error
}
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
}
private static myPrivateStaticMethod<T extends privateClass>() {
}
myPublicMethod<T extends privateClass>() { // Error
}
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
}
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
<T extends privateModule.publicClass>(): privateModule.publicClass; // Error
myMethod<T extends privateModule.publicClass>(): privateModule.publicClass; // Error
}
export class publicClassWithWithPrivateModuleTypeParameters {
static myPublicStaticMethod<T extends privateModule.publicClass>() { // Error
}
myPublicMethod<T extends privateModule.publicClass>() { // Error
}
}
export function publicFunctionWithPrivateMopduleTypeParameters<T extends privateModule.publicClass>() { // Error
}
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>() {
}
}

View File

@ -1,3 +1,4 @@
// @module: commonjs
class privateClass {
}

View File

@ -0,0 +1,155 @@
// @module: commonjs
// @declaration: true
class privateClass {
}
export class publicClass {
}
export class publicClassWithPrivateTypeParameters<T extends privateClass> { // Error
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPrivateTypeParameters<T extends privateClass> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> { // Error
myMethod(val: T): T {
return val;
}
}
class privateClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
export module publicModule {
class privateClassInPublicModule {
}
export class publicClassInPublicModule {
}
export class publicClassWithPrivateTypeParameters<T extends privateClassInPublicModule> { // Error
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPrivateTypeParameters<T extends privateClassInPublicModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> { // Error
myMethod(val: T): T {
return val;
}
}
class privateClassWithTypeParametersFromPrivateModule<T extends privateModule.publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
}
module privateModule {
class privateClassInPrivateModule {
}
export class publicClassInPrivateModule {
}
export class publicClassWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T {
return val;
}
}
export class publicClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
class privateClassWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T {
return val;
}
}
}

View File

@ -1,3 +1,4 @@
// @module: commonjs
class privateClass {
}

View File

@ -0,0 +1,192 @@
// @module: commonjs
// @declaration: true
class privateClass {
}
export class publicClass {
}
class privateClassT<T> {
}
export class publicClassT<T> {
}
export interface publicInterfaceWithPrivateTypeParameters<T extends privateClass> { // Error
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
export interface publicInterfaceWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
interface privateInterfaceWithPrivateTypeParameters<T extends privateClass> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
interface privateInterfaceWithPublicTypeParameters<T extends publicClass> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
myMethod1(): privateClassT<privateClass>;
myMethod2(): privateClassT<publicClass>;
myMethod3(): publicClassT<privateClass>;
myMethod4(): publicClassT<publicClass>;
}
export interface publicInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
}
interface privateInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassT<T>;
}
export interface publicInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
}
interface privateInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
}
export module publicModule {
class privateClassInPublicModule {
}
export class publicClassInPublicModule {
}
class privateClassInPublicModuleT<T> {
}
export class publicClassInPublicModuleT<T> {
}
export interface publicInterfaceWithPrivateTypeParameters<T extends privateClassInPublicModule> { // Error
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
export interface publicInterfaceWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
interface privateInterfaceWithPrivateTypeParameters<T extends privateClassInPublicModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
interface privateInterfaceWithPublicTypeParameters<T extends publicClassInPublicModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
myMethod1(): privateClassInPublicModuleT<privateClassInPublicModule>;
myMethod2(): privateClassInPublicModuleT<publicClassInPublicModule>;
myMethod3(): publicClassInPublicModuleT<privateClassInPublicModule>;
myMethod4(): publicClassInPublicModuleT<publicClassInPublicModule>;
}
export interface publicInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
}
interface privateInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPublicModuleT<T>;
}
export interface publicInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
}
interface privateInterfaceWithPrivateModuleTypeParameterConstraints<T extends privateModule.publicClassInPrivateModule> { // Error
}
}
module privateModule {
class privateClassInPrivateModule {
}
export class publicClassInPrivateModule {
}
class privateClassInPrivateModuleT<T> {
}
export class publicClassInPrivateModuleT<T> {
}
export interface publicInterfaceWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
export interface publicInterfaceWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
interface privateInterfaceWithPrivateTypeParameters<T extends privateClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
interface privateInterfaceWithPublicTypeParameters<T extends publicClassInPrivateModule> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
myMethod1(): privateClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod2(): privateClassInPrivateModuleT<publicClassInPrivateModule>;
myMethod3(): publicClassInPrivateModuleT<privateClassInPrivateModule>;
myMethod4(): publicClassInPrivateModuleT<publicClassInPrivateModule>;
}
export interface publicInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
}
interface privateInterfaceWithPublicTypeParametersWithoutExtends<T> {
myMethod(val: T): T;
myMethod0(): publicClassInPrivateModuleT<T>;
}
}