diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a53c1841b6ef4..9d88667111ce5 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -43363,13 +43363,20 @@ namespace ts { if (!fileToDirective) { return undefined; } + // computed property name should use node as value // property access can only be used as values, or types when within an expression with type arguments inside a heritage clause // qualified names can only be used as types\namespaces // identifiers are treated as values only if they appear in type queries - let meaning = SymbolFlags.Type | SymbolFlags.Namespace; - if ((node.kind === SyntaxKind.Identifier && isInTypeQuery(node)) || (node.kind === SyntaxKind.PropertyAccessExpression && !isInHeritageClause(node))) { + let meaning; + if (node.parent.kind === SyntaxKind.ComputedPropertyName) { meaning = SymbolFlags.Value | SymbolFlags.ExportValue; } + else { + meaning = SymbolFlags.Type | SymbolFlags.Namespace; + if ((node.kind === SyntaxKind.Identifier && isInTypeQuery(node)) || (node.kind === SyntaxKind.PropertyAccessExpression && !isInHeritageClause(node))) { + meaning = SymbolFlags.Value | SymbolFlags.ExportValue; + } + } const symbol = resolveEntityName(node, meaning, /*ignoreErrors*/ true); return symbol && symbol !== unknownSymbol ? getTypeReferenceDirectivesForSymbol(symbol, meaning) : undefined; diff --git a/tests/baselines/reference/computedPropertyNameAndTypeParameterConflict.js b/tests/baselines/reference/computedPropertyNameAndTypeParameterConflict.js new file mode 100644 index 0000000000000..3551c5b2bd187 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNameAndTypeParameterConflict.js @@ -0,0 +1,16 @@ +//// [computedPropertyNameAndTypeParameterConflict.ts] +declare const O: unique symbol; +declare class Bar { + [O]: number; +} + + + +//// [computedPropertyNameAndTypeParameterConflict.js] + + +//// [computedPropertyNameAndTypeParameterConflict.d.ts] +declare const O: unique symbol; +declare class Bar { + [O]: number; +} diff --git a/tests/baselines/reference/computedPropertyNameAndTypeParameterConflict.symbols b/tests/baselines/reference/computedPropertyNameAndTypeParameterConflict.symbols new file mode 100644 index 0000000000000..7b0d8bc0ff427 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNameAndTypeParameterConflict.symbols @@ -0,0 +1,14 @@ +=== tests/cases/compiler/computedPropertyNameAndTypeParameterConflict.ts === +declare const O: unique symbol; +>O : Symbol(O, Decl(computedPropertyNameAndTypeParameterConflict.ts, 0, 13)) + +declare class Bar { +>Bar : Symbol(Bar, Decl(computedPropertyNameAndTypeParameterConflict.ts, 0, 31)) +>O : Symbol(O, Decl(computedPropertyNameAndTypeParameterConflict.ts, 1, 18)) + + [O]: number; +>[O] : Symbol(Bar[O], Decl(computedPropertyNameAndTypeParameterConflict.ts, 1, 22)) +>O : Symbol(O, Decl(computedPropertyNameAndTypeParameterConflict.ts, 0, 13)) +} + + diff --git a/tests/baselines/reference/computedPropertyNameAndTypeParameterConflict.types b/tests/baselines/reference/computedPropertyNameAndTypeParameterConflict.types new file mode 100644 index 0000000000000..e133397796d60 --- /dev/null +++ b/tests/baselines/reference/computedPropertyNameAndTypeParameterConflict.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/computedPropertyNameAndTypeParameterConflict.ts === +declare const O: unique symbol; +>O : unique symbol + +declare class Bar { +>Bar : Bar + + [O]: number; +>[O] : number +>O : unique symbol +} + + diff --git a/tests/cases/compiler/computedPropertyNameAndTypeParameterConflict.ts b/tests/cases/compiler/computedPropertyNameAndTypeParameterConflict.ts new file mode 100644 index 0000000000000..75ad477e7d4ac --- /dev/null +++ b/tests/cases/compiler/computedPropertyNameAndTypeParameterConflict.ts @@ -0,0 +1,6 @@ +// @declaration: true +declare const O: unique symbol; +declare class Bar { + [O]: number; +} +