diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 4765c1aa334..ca37ad9acf8 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -43909,7 +43909,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { if (node.expression.kind === SyntaxKind.Identifier) { const id = node.expression as Identifier; - const sym = resolveEntityName(id, SymbolFlags.All, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, node); + const sym = getExportSymbolOfValueSymbolIfExported(resolveEntityName(id, SymbolFlags.All, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, node)); if (sym) { markAliasReferenced(sym, id); // If not a value, we're interpreting the identifier as a type export, along the lines of (`export { Id as default }`) diff --git a/tests/baselines/reference/verbatimModuleSyntaxDefaultValue.js b/tests/baselines/reference/verbatimModuleSyntaxDefaultValue.js new file mode 100644 index 00000000000..d8ef7a6e0fb --- /dev/null +++ b/tests/baselines/reference/verbatimModuleSyntaxDefaultValue.js @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/verbatimModuleSyntaxDefaultValue.ts] //// + +//// [package.json] +{ "name": "foo", "type": "module" } + +//// [index.ts] +class Task {} + +function task(): Task { return new Task(); } + +export const build = task(); +export default build; + + +//// [index.js] +class Task { +} +function task() { return new Task(); } +export const build = task(); +export default build; diff --git a/tests/baselines/reference/verbatimModuleSyntaxDefaultValue.symbols b/tests/baselines/reference/verbatimModuleSyntaxDefaultValue.symbols new file mode 100644 index 00000000000..1b0b3491241 --- /dev/null +++ b/tests/baselines/reference/verbatimModuleSyntaxDefaultValue.symbols @@ -0,0 +1,16 @@ +=== tests/cases/compiler/index.ts === +class Task {} +>Task : Symbol(Task, Decl(index.ts, 0, 0)) + +function task(): Task { return new Task(); } +>task : Symbol(task, Decl(index.ts, 0, 13)) +>Task : Symbol(Task, Decl(index.ts, 0, 0)) +>Task : Symbol(Task, Decl(index.ts, 0, 0)) + +export const build = task(); +>build : Symbol(build, Decl(index.ts, 4, 12)) +>task : Symbol(task, Decl(index.ts, 0, 13)) + +export default build; +>build : Symbol(build, Decl(index.ts, 4, 12)) + diff --git a/tests/baselines/reference/verbatimModuleSyntaxDefaultValue.types b/tests/baselines/reference/verbatimModuleSyntaxDefaultValue.types new file mode 100644 index 00000000000..acf1c447d9b --- /dev/null +++ b/tests/baselines/reference/verbatimModuleSyntaxDefaultValue.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/index.ts === +class Task {} +>Task : Task + +function task(): Task { return new Task(); } +>task : () => Task +>new Task() : Task +>Task : typeof Task + +export const build = task(); +>build : Task +>task() : Task +>task : () => Task + +export default build; +>build : Task + diff --git a/tests/cases/compiler/verbatimModuleSyntaxDefaultValue.ts b/tests/cases/compiler/verbatimModuleSyntaxDefaultValue.ts new file mode 100644 index 00000000000..e3be34a5aae --- /dev/null +++ b/tests/cases/compiler/verbatimModuleSyntaxDefaultValue.ts @@ -0,0 +1,15 @@ +// @verbatimModuleSyntax: true +// @module: node16 +// @moduleResolution: node16 +// @target: es2018 + +// @filename: package.json +{ "name": "foo", "type": "module" } + +// @filename: index.ts +class Task {} + +function task(): Task { return new Task(); } + +export const build = task(); +export default build;