diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c18d79cfee4..406ff8715d1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8684,7 +8684,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } // Need to skip over export= symbols below - json source files get a single `Property` flagged // symbol of name `export=` which needs to be handled like an alias. It's not great, but it is what it is. - if (symbol.flags & (SymbolFlags.BlockScopedVariable | SymbolFlags.FunctionScopedVariable | SymbolFlags.Property) + if (symbol.flags & (SymbolFlags.BlockScopedVariable | SymbolFlags.FunctionScopedVariable | SymbolFlags.Property | SymbolFlags.Accessor) && symbol.escapedName !== InternalSymbolName.ExportEquals && !(symbol.flags & SymbolFlags.Prototype) && !(symbol.flags & SymbolFlags.Class) diff --git a/tests/baselines/reference/accessorDeclarationEmitJs.js b/tests/baselines/reference/accessorDeclarationEmitJs.js new file mode 100644 index 00000000000..59cc0eb5644 --- /dev/null +++ b/tests/baselines/reference/accessorDeclarationEmitJs.js @@ -0,0 +1,38 @@ +//// [a.js] +export const t1 = { + p: 'value', + get getter() { + return 'value'; + }, +} + +export const t2 = { + v: 'value', + set setter(v) {}, +} + +export const t3 = { + p: 'value', + get value() { + return 'value'; + }, + set value(v) {}, +} + + + + +//// [a.d.ts] +export namespace t1 { + let p: string; + let getter: string; +} +export namespace t2 { + let v: string; + let setter: any; +} +export namespace t3 { + let p_1: string; + export { p_1 as p }; + export let value: string; +} diff --git a/tests/baselines/reference/accessorDeclarationEmitJs.symbols b/tests/baselines/reference/accessorDeclarationEmitJs.symbols new file mode 100644 index 00000000000..06bf51276d7 --- /dev/null +++ b/tests/baselines/reference/accessorDeclarationEmitJs.symbols @@ -0,0 +1,41 @@ +=== /a.js === +export const t1 = { +>t1 : Symbol(t1, Decl(a.js, 0, 12)) + + p: 'value', +>p : Symbol(p, Decl(a.js, 0, 19)) + + get getter() { +>getter : Symbol(getter, Decl(a.js, 1, 15)) + + return 'value'; + }, +} + +export const t2 = { +>t2 : Symbol(t2, Decl(a.js, 7, 12)) + + v: 'value', +>v : Symbol(v, Decl(a.js, 7, 19)) + + set setter(v) {}, +>setter : Symbol(setter, Decl(a.js, 8, 15)) +>v : Symbol(v, Decl(a.js, 9, 15)) +} + +export const t3 = { +>t3 : Symbol(t3, Decl(a.js, 12, 12)) + + p: 'value', +>p : Symbol(p, Decl(a.js, 12, 19)) + + get value() { +>value : Symbol(value, Decl(a.js, 13, 15), Decl(a.js, 16, 6)) + + return 'value'; + }, + set value(v) {}, +>value : Symbol(value, Decl(a.js, 13, 15), Decl(a.js, 16, 6)) +>v : Symbol(v, Decl(a.js, 17, 14)) +} + diff --git a/tests/baselines/reference/accessorDeclarationEmitJs.types b/tests/baselines/reference/accessorDeclarationEmitJs.types new file mode 100644 index 00000000000..89dc07ef6b5 --- /dev/null +++ b/tests/baselines/reference/accessorDeclarationEmitJs.types @@ -0,0 +1,51 @@ +=== /a.js === +export const t1 = { +>t1 : { p: string; readonly getter: string; } +>{ p: 'value', get getter() { return 'value'; },} : { p: string; readonly getter: string; } + + p: 'value', +>p : string +>'value' : "value" + + get getter() { +>getter : string + + return 'value'; +>'value' : "value" + + }, +} + +export const t2 = { +>t2 : { v: string; setter: any; } +>{ v: 'value', set setter(v) {},} : { v: string; setter: any; } + + v: 'value', +>v : string +>'value' : "value" + + set setter(v) {}, +>setter : any +>v : any +} + +export const t3 = { +>t3 : { p: string; value: string; } +>{ p: 'value', get value() { return 'value'; }, set value(v) {},} : { p: string; value: string; } + + p: 'value', +>p : string +>'value' : "value" + + get value() { +>value : string + + return 'value'; +>'value' : "value" + + }, + set value(v) {}, +>value : string +>v : string +} + diff --git a/tests/cases/compiler/accessorDeclarationEmitJs.ts b/tests/cases/compiler/accessorDeclarationEmitJs.ts new file mode 100644 index 00000000000..b729ec9209e --- /dev/null +++ b/tests/cases/compiler/accessorDeclarationEmitJs.ts @@ -0,0 +1,24 @@ +// @allowJs: true +// @checkJs: true +// @declaration: true +// @emitDeclarationOnly: true +// @filename: /a.js +export const t1 = { + p: 'value', + get getter() { + return 'value'; + }, +} + +export const t2 = { + v: 'value', + set setter(v) {}, +} + +export const t3 = { + p: 'value', + get value() { + return 'value'; + }, + set value(v) {}, +}