diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 4765c1aa33402..d23eefbacacf0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -37998,7 +37998,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function checkAccessorDeclaration(node: AccessorDeclaration) { - if (isIdentifier(node.name) && idText(node.name) === "constructor") { + if (isIdentifier(node.name) && idText(node.name) === "constructor" && isClassLike(node.parent)) { error(node.name, Diagnostics.Class_constructor_may_not_be_an_accessor); } addLazyDiagnostic(checkAccessorDeclarationDiagnostics); diff --git a/tests/baselines/reference/constructorNameInObjectLiteralAccessor.js b/tests/baselines/reference/constructorNameInObjectLiteralAccessor.js new file mode 100644 index 0000000000000..4d43a38e79b9a --- /dev/null +++ b/tests/baselines/reference/constructorNameInObjectLiteralAccessor.js @@ -0,0 +1,12 @@ +//// [constructorNameInObjectLiteralAccessor.ts] +const c1 = { + get constructor() { return }, + set constructor(value) {} +} + + +//// [constructorNameInObjectLiteralAccessor.js] +const c1 = { + get constructor() { return; }, + set constructor(value) { } +}; diff --git a/tests/baselines/reference/constructorNameInObjectLiteralAccessor.symbols b/tests/baselines/reference/constructorNameInObjectLiteralAccessor.symbols new file mode 100644 index 0000000000000..fd9e0d3c8b44f --- /dev/null +++ b/tests/baselines/reference/constructorNameInObjectLiteralAccessor.symbols @@ -0,0 +1,12 @@ +=== tests/cases/conformance/salsa/constructorNameInObjectLiteralAccessor.ts === +const c1 = { +>c1 : Symbol(c1, Decl(constructorNameInObjectLiteralAccessor.ts, 0, 5)) + + get constructor() { return }, +>constructor : Symbol(constructor, Decl(constructorNameInObjectLiteralAccessor.ts, 0, 12), Decl(constructorNameInObjectLiteralAccessor.ts, 1, 33)) + + set constructor(value) {} +>constructor : Symbol(constructor, Decl(constructorNameInObjectLiteralAccessor.ts, 0, 12), Decl(constructorNameInObjectLiteralAccessor.ts, 1, 33)) +>value : Symbol(value, Decl(constructorNameInObjectLiteralAccessor.ts, 2, 20)) +} + diff --git a/tests/baselines/reference/constructorNameInObjectLiteralAccessor.types b/tests/baselines/reference/constructorNameInObjectLiteralAccessor.types new file mode 100644 index 0000000000000..12e74c11c59f0 --- /dev/null +++ b/tests/baselines/reference/constructorNameInObjectLiteralAccessor.types @@ -0,0 +1,13 @@ +=== tests/cases/conformance/salsa/constructorNameInObjectLiteralAccessor.ts === +const c1 = { +>c1 : { constructor: void; } +>{ get constructor() { return }, set constructor(value) {}} : { constructor: void; } + + get constructor() { return }, +>constructor : void + + set constructor(value) {} +>constructor : void +>value : void +} + diff --git a/tests/cases/conformance/salsa/constructorNameInObjectLiteralAccessor.ts b/tests/cases/conformance/salsa/constructorNameInObjectLiteralAccessor.ts new file mode 100644 index 0000000000000..6488a5016c6ff --- /dev/null +++ b/tests/cases/conformance/salsa/constructorNameInObjectLiteralAccessor.ts @@ -0,0 +1,5 @@ +// @target: esnext +const c1 = { + get constructor() { return }, + set constructor(value) {} +}