mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-23 10:04:47 -05:00
Ensure correct errors when emitting declarations
This commit is contained in:
@@ -24569,14 +24569,6 @@ namespace ts {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function isLiteralDynamicName(name: ComputedPropertyName) {
|
||||
name = getParseTreeNode(name, isComputedPropertyName);
|
||||
if (name) {
|
||||
return isLateBindableName(name);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function isLiteralConstDeclaration(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration): boolean {
|
||||
if (isConst(node)) {
|
||||
const type = getTypeOfSymbol(getSymbolOfNode(node));
|
||||
@@ -24650,7 +24642,11 @@ namespace ts {
|
||||
getTypeReferenceDirectivesForEntityName,
|
||||
getTypeReferenceDirectivesForSymbol,
|
||||
isLiteralConstDeclaration,
|
||||
isLiteralDynamicName,
|
||||
isLateBound: (node: Declaration): node is LateBoundDeclaration => {
|
||||
node = getParseTreeNode(node, isDeclaration);
|
||||
const symbol = node && getSymbolOfNode(node);
|
||||
return !!(symbol && symbol.flags & SymbolFlags.Late);
|
||||
},
|
||||
writeLiteralConstValue,
|
||||
getJsxFactoryEntity: () => _jsxFactoryEntity
|
||||
};
|
||||
|
||||
@@ -1227,7 +1227,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
function emitPropertyDeclaration(node: Declaration) {
|
||||
if (hasDynamicName(node) && !resolver.isLiteralDynamicName(<ComputedPropertyName>getNameOfDeclaration(node))) {
|
||||
if (hasDynamicName(node) && !resolver.isLateBound(node)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1246,17 +1246,8 @@ namespace ts {
|
||||
emitBindingPattern(<BindingPattern>node.name);
|
||||
}
|
||||
else {
|
||||
if (isDynamicName(node.name)) {
|
||||
// If this node has a dynamic name, it can only be an identifier or property access because
|
||||
// we've already skipped it otherwise.
|
||||
emitDynamicName(<EntityNameExpression>(<ComputedPropertyName>node.name).expression);
|
||||
}
|
||||
else {
|
||||
// If this node is a computed name, it can only be a symbol, because we've already skipped
|
||||
// it if it's not a well known symbol. In that case, the text of the name will be exactly
|
||||
// what we want, namely the name expression enclosed in brackets.
|
||||
writeTextOfNode(currentText, node.name);
|
||||
}
|
||||
writeNameOfDeclaration(node, getVariableDeclarationTypeOrNameVisibilityError);
|
||||
|
||||
// If optional property emit ? but in the case of parameterProperty declaration with "?" indicating optional parameter for the constructor
|
||||
// we don't want to emit property declaration with "?"
|
||||
if ((node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertySignature ||
|
||||
@@ -1271,12 +1262,12 @@ namespace ts {
|
||||
resolver.writeLiteralConstValue(node, writer);
|
||||
}
|
||||
else if (!hasModifier(node, ModifierFlags.Private)) {
|
||||
writeTypeOfDeclaration(node, node.type, getVariableDeclarationTypeVisibilityError);
|
||||
writeTypeOfDeclaration(node, node.type, getVariableDeclarationTypeOrNameVisibilityError);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult: SymbolAccessibilityResult) {
|
||||
function getVariableDeclarationTypeOrNameVisibilityDiagnosticMessage(symbolAccessibilityResult: SymbolAccessibilityResult) {
|
||||
if (node.kind === SyntaxKind.VariableDeclaration) {
|
||||
return symbolAccessibilityResult.errorModuleName ?
|
||||
symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ?
|
||||
@@ -1312,8 +1303,8 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
function getVariableDeclarationTypeVisibilityError(symbolAccessibilityResult: SymbolAccessibilityResult): SymbolAccessibilityDiagnostic {
|
||||
const diagnosticMessage = getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult);
|
||||
function getVariableDeclarationTypeOrNameVisibilityError(symbolAccessibilityResult: SymbolAccessibilityResult): SymbolAccessibilityDiagnostic {
|
||||
const diagnosticMessage = getVariableDeclarationTypeOrNameVisibilityDiagnosticMessage(symbolAccessibilityResult);
|
||||
return diagnosticMessage !== undefined ? {
|
||||
diagnosticMessage,
|
||||
errorNode: node,
|
||||
@@ -1321,14 +1312,6 @@ namespace ts {
|
||||
} : undefined;
|
||||
}
|
||||
|
||||
function emitDynamicName(entityName: EntityNameExpression) {
|
||||
writer.getSymbolAccessibilityDiagnostic = getVariableDeclarationTypeVisibilityError;
|
||||
const visibilityResult = resolver.isEntityNameVisible(entityName, enclosingDeclaration);
|
||||
handleSymbolAccessibilityError(visibilityResult);
|
||||
recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForEntityName(entityName));
|
||||
writeTextOfNode(currentText, node.name);
|
||||
}
|
||||
|
||||
function emitBindingPattern(bindingPattern: BindingPattern) {
|
||||
// Only select non-omitted expression from the bindingPattern's elements.
|
||||
// We have to do this to avoid emitting trailing commas.
|
||||
@@ -1346,7 +1329,7 @@ namespace ts {
|
||||
|
||||
function emitBindingElement(bindingElement: BindingElement) {
|
||||
function getBindingElementTypeVisibilityError(symbolAccessibilityResult: SymbolAccessibilityResult): SymbolAccessibilityDiagnostic {
|
||||
const diagnosticMessage = getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult);
|
||||
const diagnosticMessage = getVariableDeclarationTypeOrNameVisibilityDiagnosticMessage(symbolAccessibilityResult);
|
||||
return diagnosticMessage !== undefined ? {
|
||||
diagnosticMessage,
|
||||
errorNode: bindingElement,
|
||||
@@ -1402,7 +1385,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
function emitAccessorDeclaration(node: AccessorDeclaration) {
|
||||
if (hasDynamicName(node)) {
|
||||
if (hasDynamicName(node) && !resolver.isLateBound(node)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1413,7 +1396,7 @@ namespace ts {
|
||||
emitJsDocComments(accessors.getAccessor);
|
||||
emitJsDocComments(accessors.setAccessor);
|
||||
emitClassMemberDeclarationFlags(getModifierFlags(node) | (accessors.setAccessor ? 0 : ModifierFlags.Readonly));
|
||||
writeTextOfNode(currentText, node.name);
|
||||
writeNameOfDeclaration(node, getAccessorNameVisibilityError);
|
||||
if (!hasModifier(node, ModifierFlags.Private)) {
|
||||
accessorWithTypeAnnotation = node;
|
||||
let type = getTypeAnnotationFromAccessor(node);
|
||||
@@ -1441,6 +1424,37 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
function getAccessorNameVisibilityError(symbolAccessibilityResult: SymbolAccessibilityResult) {
|
||||
const diagnosticMessage = getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult);
|
||||
return diagnosticMessage !== undefined ? {
|
||||
diagnosticMessage,
|
||||
errorNode: node,
|
||||
typeName: node.name
|
||||
} : undefined;
|
||||
}
|
||||
|
||||
function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult: SymbolAccessibilityResult) {
|
||||
if (hasModifier(node, ModifierFlags.Static)) {
|
||||
return symbolAccessibilityResult.errorModuleName ?
|
||||
symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ?
|
||||
Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
|
||||
Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
|
||||
Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
|
||||
}
|
||||
else if (node.parent.kind === SyntaxKind.ClassDeclaration) {
|
||||
return symbolAccessibilityResult.errorModuleName ?
|
||||
symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ?
|
||||
Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
|
||||
Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
|
||||
Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1;
|
||||
}
|
||||
else {
|
||||
return symbolAccessibilityResult.errorModuleName ?
|
||||
Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 :
|
||||
Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1;
|
||||
}
|
||||
}
|
||||
|
||||
function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult: SymbolAccessibilityResult): SymbolAccessibilityDiagnostic {
|
||||
let diagnosticMessage: DiagnosticMessage;
|
||||
if (accessorWithTypeAnnotation.kind === SyntaxKind.SetAccessor) {
|
||||
@@ -1487,7 +1501,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
function writeFunctionDeclaration(node: FunctionLikeDeclaration) {
|
||||
if (hasDynamicName(node)) {
|
||||
if (hasDynamicName(node) && !resolver.isLateBound(node)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1509,13 +1523,69 @@ namespace ts {
|
||||
write("constructor");
|
||||
}
|
||||
else {
|
||||
writeTextOfNode(currentText, node.name);
|
||||
writeNameOfDeclaration(node, getMethodNameVisibilityError);
|
||||
if (hasQuestionToken(node)) {
|
||||
write("?");
|
||||
}
|
||||
}
|
||||
emitSignatureDeclaration(node);
|
||||
}
|
||||
|
||||
function getMethodNameVisibilityError(symbolAccessibilityResult: SymbolAccessibilityResult): SymbolAccessibilityDiagnostic {
|
||||
const diagnosticMessage = getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult);
|
||||
return diagnosticMessage !== undefined ? {
|
||||
diagnosticMessage,
|
||||
errorNode: node,
|
||||
typeName: node.name
|
||||
} : undefined;
|
||||
}
|
||||
|
||||
function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult: SymbolAccessibilityResult) {
|
||||
if (hasModifier(node, ModifierFlags.Static)) {
|
||||
return symbolAccessibilityResult.errorModuleName ?
|
||||
symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ?
|
||||
Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
|
||||
Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
|
||||
Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1;
|
||||
}
|
||||
else if (node.parent.kind === SyntaxKind.ClassDeclaration) {
|
||||
return symbolAccessibilityResult.errorModuleName ?
|
||||
symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ?
|
||||
Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
|
||||
Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
|
||||
Diagnostics.Public_method_0_of_exported_class_has_or_is_using_private_name_1;
|
||||
}
|
||||
else {
|
||||
return symbolAccessibilityResult.errorModuleName ?
|
||||
Diagnostics.Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 :
|
||||
Diagnostics.Method_0_of_exported_interface_has_or_is_using_private_name_1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function writeNameOfDeclaration(node: NamedDeclaration, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic) {
|
||||
if (hasDynamicName(node)) {
|
||||
// If this node has a dynamic name, it can only be an identifier or property access because
|
||||
// we've already skipped it otherwise.
|
||||
Debug.assert(resolver.isLateBound(node));
|
||||
|
||||
writeLateBoundNameOfDeclaration(node as LateBoundDeclaration, getSymbolAccessibilityDiagnostic);
|
||||
}
|
||||
else {
|
||||
// If this node is a computed name, it can only be a symbol, because we've already skipped
|
||||
// it if it's not a well known symbol. In that case, the text of the name will be exactly
|
||||
// what we want, namely the name expression enclosed in brackets.
|
||||
writeTextOfNode(currentText, node.name);
|
||||
}
|
||||
}
|
||||
|
||||
function writeLateBoundNameOfDeclaration(node: LateBoundDeclaration, getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic) {
|
||||
writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
|
||||
const entityName = node.name.expression;
|
||||
const visibilityResult = resolver.isEntityNameVisible(entityName, enclosingDeclaration);
|
||||
handleSymbolAccessibilityError(visibilityResult);
|
||||
recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForEntityName(entityName));
|
||||
writeTextOfNode(currentText, node.name);
|
||||
}
|
||||
|
||||
function emitSignatureDeclarationWithJsDocComments(node: SignatureDeclaration) {
|
||||
|
||||
@@ -2562,6 +2562,39 @@
|
||||
"code": 4094
|
||||
},
|
||||
|
||||
"Public static method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": {
|
||||
"category": "Error",
|
||||
"code": 4095
|
||||
},
|
||||
"Public static method '{0}' of exported class has or is using name '{1}' from private module '{2}'.": {
|
||||
"category": "Error",
|
||||
"code": 4096
|
||||
},
|
||||
"Public static method '{0}' of exported class has or is using private name '{1}'.": {
|
||||
"category": "Error",
|
||||
"code": 4097
|
||||
},
|
||||
"Public method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.": {
|
||||
"category": "Error",
|
||||
"code": 4098
|
||||
},
|
||||
"Public method '{0}' of exported class has or is using name '{1}' from private module '{2}'.": {
|
||||
"category": "Error",
|
||||
"code": 4099
|
||||
},
|
||||
"Public method '{0}' of exported class has or is using private name '{1}'.": {
|
||||
"category": "Error",
|
||||
"code": 4100
|
||||
},
|
||||
"Method '{0}' of exported interface has or is using name '{1}' from private module '{2}'.": {
|
||||
"category": "Error",
|
||||
"code": 4101
|
||||
},
|
||||
"Method '{0}' of exported interface has or is using private name '{1}'.": {
|
||||
"category": "Error",
|
||||
"code": 4102
|
||||
},
|
||||
|
||||
"The current host does not support the '{0}' option.": {
|
||||
"category": "Error",
|
||||
"code": 5001
|
||||
|
||||
@@ -662,9 +662,14 @@ namespace ts {
|
||||
name?: DeclarationName;
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
export interface DynamicNamedDeclaration extends NamedDeclaration {
|
||||
name: ComputedPropertyName;
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
// A declaration that supports late-binding (used in checker)
|
||||
export interface LateBoundDeclaration extends NamedDeclaration {
|
||||
export interface LateBoundDeclaration extends DynamicNamedDeclaration {
|
||||
name: LateBoundName;
|
||||
}
|
||||
|
||||
@@ -2945,7 +2950,7 @@ namespace ts {
|
||||
isTopLevelValueImportEqualsWithEntityName(node: ImportEqualsDeclaration): boolean;
|
||||
getNodeCheckFlags(node: Node): NodeCheckFlags;
|
||||
isDeclarationVisible(node: Declaration): boolean;
|
||||
isLiteralDynamicName(node: ComputedPropertyName): boolean;
|
||||
isLateBound(node: Declaration): node is LateBoundDeclaration;
|
||||
collectLinkedAliases(node: Identifier): Node[];
|
||||
isImplementationOfOverload(node: FunctionLikeDeclaration): boolean | undefined;
|
||||
isRequiredInitializedParameter(node: ParameterDeclaration): boolean;
|
||||
|
||||
@@ -2001,7 +2001,7 @@ namespace ts {
|
||||
* is a property of the Symbol constructor that denotes a built in
|
||||
* Symbol.
|
||||
*/
|
||||
export function hasDynamicName(declaration: Declaration): boolean {
|
||||
export function hasDynamicName(declaration: Declaration): declaration is DynamicNamedDeclaration {
|
||||
const name = getNameOfDeclaration(declaration);
|
||||
return name && isDynamicName(name);
|
||||
}
|
||||
|
||||
@@ -7,10 +7,25 @@ tests/cases/compiler/dynamicNamesErrors.ts(24,1): error TS2322: Type 'T2' is not
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(25,1): error TS2322: Type 'T1' is not assignable to type 'T2'.
|
||||
Types of property '[c0]' are incompatible.
|
||||
Type 'number' is not assignable to type 'string'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(28,6): error TS4033: Property '[c0]' of exported interface has or is using private name 'c0'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(33,6): error TS4033: Property '[x]' of exported interface has or is using private name 'x'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(34,6): error TS4102: Method '[y]' of exported interface has or is using private name 'y'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(38,13): error TS4028: Public static property '[x]' of exported class has or is using private name 'x'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(39,13): error TS4097: Public static method '[y]' of exported class has or is using private name 'y'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(40,17): error TS4028: Public static property '[z]' of exported class has or is using private name 'z'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(41,17): error TS4028: Public static property '[w]' of exported class has or is using private name 'w'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(43,6): error TS4031: Public property '[x]' of exported class has or is using private name 'x'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(44,6): error TS4100: Public method '[y]' of exported class has or is using private name 'y'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(45,10): error TS4031: Public property '[z]' of exported class has or is using private name 'z'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(46,10): error TS4031: Public property '[w]' of exported class has or is using private name 'w'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(50,6): error TS4033: Property '[x]' of exported interface has or is using private name 'x'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(51,6): error TS4102: Method '[y]' of exported interface has or is using private name 'y'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(54,14): error TS4025: Exported variable 'ObjectLiteralVisibility' has or is using private name 'w'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(54,14): error TS4025: Exported variable 'ObjectLiteralVisibility' has or is using private name 'x'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(54,14): error TS4025: Exported variable 'ObjectLiteralVisibility' has or is using private name 'y'.
|
||||
tests/cases/compiler/dynamicNamesErrors.ts(54,14): error TS4025: Exported variable 'ObjectLiteralVisibility' has or is using private name 'z'.
|
||||
|
||||
|
||||
==== tests/cases/compiler/dynamicNamesErrors.ts (6 errors) ====
|
||||
==== tests/cases/compiler/dynamicNamesErrors.ts (21 errors) ====
|
||||
const c0 = "1";
|
||||
const c1 = 1;
|
||||
|
||||
@@ -51,8 +66,68 @@ tests/cases/compiler/dynamicNamesErrors.ts(28,6): error TS4033: Property '[c0]'
|
||||
!!! error TS2322: Types of property '[c0]' are incompatible.
|
||||
!!! error TS2322: Type 'number' is not assignable to type 'string'.
|
||||
|
||||
export interface T4 {
|
||||
[c0]: number;
|
||||
~~
|
||||
!!! error TS4033: Property '[c0]' of exported interface has or is using private name 'c0'.
|
||||
}
|
||||
const x = Symbol();
|
||||
const y = Symbol();
|
||||
const z = Symbol();
|
||||
const w = Symbol();
|
||||
|
||||
export interface InterfaceMemberVisibility {
|
||||
[x]: number;
|
||||
~
|
||||
!!! error TS4033: Property '[x]' of exported interface has or is using private name 'x'.
|
||||
[y](): number;
|
||||
~
|
||||
!!! error TS4102: Method '[y]' of exported interface has or is using private name 'y'.
|
||||
}
|
||||
|
||||
export class ClassMemberVisibility {
|
||||
static [x]: number;
|
||||
~
|
||||
!!! error TS4028: Public static property '[x]' of exported class has or is using private name 'x'.
|
||||
static [y](): number { return 0; }
|
||||
~
|
||||
!!! error TS4097: Public static method '[y]' of exported class has or is using private name 'y'.
|
||||
static get [z](): number { return 0; }
|
||||
~
|
||||
!!! error TS4028: Public static property '[z]' of exported class has or is using private name 'z'.
|
||||
static set [w](value: number) { }
|
||||
~
|
||||
!!! error TS4028: Public static property '[w]' of exported class has or is using private name 'w'.
|
||||
|
||||
[x]: number;
|
||||
~
|
||||
!!! error TS4031: Public property '[x]' of exported class has or is using private name 'x'.
|
||||
[y](): number { return 0; }
|
||||
~
|
||||
!!! error TS4100: Public method '[y]' of exported class has or is using private name 'y'.
|
||||
get [z](): number { return 0; }
|
||||
~
|
||||
!!! error TS4031: Public property '[z]' of exported class has or is using private name 'z'.
|
||||
set [w](value: number) { }
|
||||
~
|
||||
!!! error TS4031: Public property '[w]' of exported class has or is using private name 'w'.
|
||||
}
|
||||
|
||||
export type ObjectTypeVisibility = {
|
||||
[x]: number;
|
||||
~
|
||||
!!! error TS4033: Property '[x]' of exported interface has or is using private name 'x'.
|
||||
[y](): number;
|
||||
~
|
||||
!!! error TS4102: Method '[y]' of exported interface has or is using private name 'y'.
|
||||
};
|
||||
|
||||
export const ObjectLiteralVisibility = {
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS4025: Exported variable 'ObjectLiteralVisibility' has or is using private name 'w'.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS4025: Exported variable 'ObjectLiteralVisibility' has or is using private name 'x'.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS4025: Exported variable 'ObjectLiteralVisibility' has or is using private name 'y'.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS4025: Exported variable 'ObjectLiteralVisibility' has or is using private name 'z'.
|
||||
[x]: 0,
|
||||
[y](): number { return 0; },
|
||||
get [z](): number { return 0; },
|
||||
set [w](value: number) { },
|
||||
};
|
||||
@@ -25,9 +25,39 @@ let t2: T2;
|
||||
t1 = t2;
|
||||
t2 = t1;
|
||||
|
||||
export interface T4 {
|
||||
[c0]: number;
|
||||
}
|
||||
const x = Symbol();
|
||||
const y = Symbol();
|
||||
const z = Symbol();
|
||||
const w = Symbol();
|
||||
|
||||
export interface InterfaceMemberVisibility {
|
||||
[x]: number;
|
||||
[y](): number;
|
||||
}
|
||||
|
||||
export class ClassMemberVisibility {
|
||||
static [x]: number;
|
||||
static [y](): number { return 0; }
|
||||
static get [z](): number { return 0; }
|
||||
static set [w](value: number) { }
|
||||
|
||||
[x]: number;
|
||||
[y](): number { return 0; }
|
||||
get [z](): number { return 0; }
|
||||
set [w](value: number) { }
|
||||
}
|
||||
|
||||
export type ObjectTypeVisibility = {
|
||||
[x]: number;
|
||||
[y](): number;
|
||||
};
|
||||
|
||||
export const ObjectLiteralVisibility = {
|
||||
[x]: 0,
|
||||
[y](): number { return 0; },
|
||||
get [z](): number { return 0; },
|
||||
set [w](value: number) { },
|
||||
};
|
||||
|
||||
//// [dynamicNamesErrors.js]
|
||||
"use strict";
|
||||
@@ -38,3 +68,22 @@ let t1;
|
||||
let t2;
|
||||
t1 = t2;
|
||||
t2 = t1;
|
||||
const x = Symbol();
|
||||
const y = Symbol();
|
||||
const z = Symbol();
|
||||
const w = Symbol();
|
||||
class ClassMemberVisibility {
|
||||
static [y]() { return 0; }
|
||||
static get [z]() { return 0; }
|
||||
static set [w](value) { }
|
||||
[y]() { return 0; }
|
||||
get [z]() { return 0; }
|
||||
set [w](value) { }
|
||||
}
|
||||
exports.ClassMemberVisibility = ClassMemberVisibility;
|
||||
exports.ObjectLiteralVisibility = {
|
||||
[x]: 0,
|
||||
[y]() { return 0; },
|
||||
get [z]() { return 0; },
|
||||
set [w](value) { },
|
||||
};
|
||||
|
||||
@@ -54,9 +54,87 @@ t2 = t1;
|
||||
>t2 : Symbol(t2, Decl(dynamicNamesErrors.ts, 22, 3))
|
||||
>t1 : Symbol(t1, Decl(dynamicNamesErrors.ts, 21, 3))
|
||||
|
||||
export interface T4 {
|
||||
>T4 : Symbol(T4, Decl(dynamicNamesErrors.ts, 24, 8))
|
||||
const x = Symbol();
|
||||
>x : Symbol(x, Decl(dynamicNamesErrors.ts, 26, 5))
|
||||
>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --))
|
||||
|
||||
[c0]: number;
|
||||
>c0 : Symbol(c0, Decl(dynamicNamesErrors.ts, 0, 5))
|
||||
const y = Symbol();
|
||||
>y : Symbol(y, Decl(dynamicNamesErrors.ts, 27, 5))
|
||||
>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --))
|
||||
|
||||
const z = Symbol();
|
||||
>z : Symbol(z, Decl(dynamicNamesErrors.ts, 28, 5))
|
||||
>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --))
|
||||
|
||||
const w = Symbol();
|
||||
>w : Symbol(w, Decl(dynamicNamesErrors.ts, 29, 5))
|
||||
>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --))
|
||||
|
||||
export interface InterfaceMemberVisibility {
|
||||
>InterfaceMemberVisibility : Symbol(InterfaceMemberVisibility, Decl(dynamicNamesErrors.ts, 29, 19))
|
||||
|
||||
[x]: number;
|
||||
>x : Symbol(x, Decl(dynamicNamesErrors.ts, 26, 5))
|
||||
|
||||
[y](): number;
|
||||
>y : Symbol(y, Decl(dynamicNamesErrors.ts, 27, 5))
|
||||
}
|
||||
|
||||
export class ClassMemberVisibility {
|
||||
>ClassMemberVisibility : Symbol(ClassMemberVisibility, Decl(dynamicNamesErrors.ts, 34, 1))
|
||||
|
||||
static [x]: number;
|
||||
>x : Symbol(x, Decl(dynamicNamesErrors.ts, 26, 5))
|
||||
|
||||
static [y](): number { return 0; }
|
||||
>y : Symbol(y, Decl(dynamicNamesErrors.ts, 27, 5))
|
||||
|
||||
static get [z](): number { return 0; }
|
||||
>z : Symbol(z, Decl(dynamicNamesErrors.ts, 28, 5))
|
||||
|
||||
static set [w](value: number) { }
|
||||
>w : Symbol(w, Decl(dynamicNamesErrors.ts, 29, 5))
|
||||
>value : Symbol(value, Decl(dynamicNamesErrors.ts, 40, 19))
|
||||
|
||||
[x]: number;
|
||||
>x : Symbol(x, Decl(dynamicNamesErrors.ts, 26, 5))
|
||||
|
||||
[y](): number { return 0; }
|
||||
>y : Symbol(y, Decl(dynamicNamesErrors.ts, 27, 5))
|
||||
|
||||
get [z](): number { return 0; }
|
||||
>z : Symbol(z, Decl(dynamicNamesErrors.ts, 28, 5))
|
||||
|
||||
set [w](value: number) { }
|
||||
>w : Symbol(w, Decl(dynamicNamesErrors.ts, 29, 5))
|
||||
>value : Symbol(value, Decl(dynamicNamesErrors.ts, 45, 12))
|
||||
}
|
||||
|
||||
export type ObjectTypeVisibility = {
|
||||
>ObjectTypeVisibility : Symbol(ObjectTypeVisibility, Decl(dynamicNamesErrors.ts, 46, 1))
|
||||
|
||||
[x]: number;
|
||||
>x : Symbol(x, Decl(dynamicNamesErrors.ts, 26, 5))
|
||||
|
||||
[y](): number;
|
||||
>y : Symbol(y, Decl(dynamicNamesErrors.ts, 27, 5))
|
||||
|
||||
};
|
||||
|
||||
export const ObjectLiteralVisibility = {
|
||||
>ObjectLiteralVisibility : Symbol(ObjectLiteralVisibility, Decl(dynamicNamesErrors.ts, 53, 12))
|
||||
|
||||
[x]: 0,
|
||||
>x : Symbol(x, Decl(dynamicNamesErrors.ts, 26, 5))
|
||||
|
||||
[y](): number { return 0; },
|
||||
>y : Symbol(y, Decl(dynamicNamesErrors.ts, 27, 5))
|
||||
|
||||
get [z](): number { return 0; },
|
||||
>z : Symbol(z, Decl(dynamicNamesErrors.ts, 28, 5))
|
||||
|
||||
set [w](value: number) { },
|
||||
>w : Symbol(w, Decl(dynamicNamesErrors.ts, 29, 5))
|
||||
>value : Symbol(value, Decl(dynamicNamesErrors.ts, 57, 12))
|
||||
|
||||
};
|
||||
|
||||
@@ -58,9 +58,99 @@ t2 = t1;
|
||||
>t2 : T2
|
||||
>t1 : T1
|
||||
|
||||
export interface T4 {
|
||||
>T4 : T4
|
||||
const x = Symbol();
|
||||
>x : unique symbol
|
||||
>Symbol() : unique symbol
|
||||
>Symbol : SymbolConstructor
|
||||
|
||||
[c0]: number;
|
||||
>c0 : "1"
|
||||
const y = Symbol();
|
||||
>y : unique symbol
|
||||
>Symbol() : unique symbol
|
||||
>Symbol : SymbolConstructor
|
||||
|
||||
const z = Symbol();
|
||||
>z : unique symbol
|
||||
>Symbol() : unique symbol
|
||||
>Symbol : SymbolConstructor
|
||||
|
||||
const w = Symbol();
|
||||
>w : unique symbol
|
||||
>Symbol() : unique symbol
|
||||
>Symbol : SymbolConstructor
|
||||
|
||||
export interface InterfaceMemberVisibility {
|
||||
>InterfaceMemberVisibility : InterfaceMemberVisibility
|
||||
|
||||
[x]: number;
|
||||
>x : unique symbol
|
||||
|
||||
[y](): number;
|
||||
>y : unique symbol
|
||||
}
|
||||
|
||||
export class ClassMemberVisibility {
|
||||
>ClassMemberVisibility : ClassMemberVisibility
|
||||
|
||||
static [x]: number;
|
||||
>x : unique symbol
|
||||
|
||||
static [y](): number { return 0; }
|
||||
>y : unique symbol
|
||||
>0 : 0
|
||||
|
||||
static get [z](): number { return 0; }
|
||||
>z : unique symbol
|
||||
>0 : 0
|
||||
|
||||
static set [w](value: number) { }
|
||||
>w : unique symbol
|
||||
>value : number
|
||||
|
||||
[x]: number;
|
||||
>x : unique symbol
|
||||
|
||||
[y](): number { return 0; }
|
||||
>y : unique symbol
|
||||
>0 : 0
|
||||
|
||||
get [z](): number { return 0; }
|
||||
>z : unique symbol
|
||||
>0 : 0
|
||||
|
||||
set [w](value: number) { }
|
||||
>w : unique symbol
|
||||
>value : number
|
||||
}
|
||||
|
||||
export type ObjectTypeVisibility = {
|
||||
>ObjectTypeVisibility : ObjectTypeVisibility
|
||||
|
||||
[x]: number;
|
||||
>x : unique symbol
|
||||
|
||||
[y](): number;
|
||||
>y : unique symbol
|
||||
|
||||
};
|
||||
|
||||
export const ObjectLiteralVisibility = {
|
||||
>ObjectLiteralVisibility : { [x]: number; [y](): number; readonly [z]: number; [w]: number; }
|
||||
>{ [x]: 0, [y](): number { return 0; }, get [z](): number { return 0; }, set [w](value: number) { },} : { [x]: number; [y](): number; readonly [z]: number; [w]: number; }
|
||||
|
||||
[x]: 0,
|
||||
>x : unique symbol
|
||||
>0 : 0
|
||||
|
||||
[y](): number { return 0; },
|
||||
>y : unique symbol
|
||||
>0 : 0
|
||||
|
||||
get [z](): number { return 0; },
|
||||
>z : unique symbol
|
||||
>0 : 0
|
||||
|
||||
set [w](value: number) { },
|
||||
>w : unique symbol
|
||||
>value : number
|
||||
|
||||
};
|
||||
|
||||
@@ -27,6 +27,36 @@ let t2: T2;
|
||||
t1 = t2;
|
||||
t2 = t1;
|
||||
|
||||
export interface T4 {
|
||||
[c0]: number;
|
||||
}
|
||||
const x = Symbol();
|
||||
const y = Symbol();
|
||||
const z = Symbol();
|
||||
const w = Symbol();
|
||||
|
||||
export interface InterfaceMemberVisibility {
|
||||
[x]: number;
|
||||
[y](): number;
|
||||
}
|
||||
|
||||
export class ClassMemberVisibility {
|
||||
static [x]: number;
|
||||
static [y](): number { return 0; }
|
||||
static get [z](): number { return 0; }
|
||||
static set [w](value: number) { }
|
||||
|
||||
[x]: number;
|
||||
[y](): number { return 0; }
|
||||
get [z](): number { return 0; }
|
||||
set [w](value: number) { }
|
||||
}
|
||||
|
||||
export type ObjectTypeVisibility = {
|
||||
[x]: number;
|
||||
[y](): number;
|
||||
};
|
||||
|
||||
export const ObjectLiteralVisibility = {
|
||||
[x]: 0,
|
||||
[y](): number { return 0; },
|
||||
get [z](): number { return 0; },
|
||||
set [w](value: number) { },
|
||||
};
|
||||
Reference in New Issue
Block a user