Fix declaration emit for JS default re-exports that resolve to modules through synthesized default exports (#56340)

This commit is contained in:
Andrew Branch
2024-01-03 15:46:54 -06:00
committed by GitHub
parent aa186a82cf
commit a099275b2a
3 changed files with 36 additions and 0 deletions
+3
View File
@@ -9744,6 +9744,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
// does not use localName because the symbol name in this case refers to the name in the exports table,
// which we must exactly preserve
const specifier = (node.parent.parent as ExportDeclaration).moduleSpecifier;
if (specifier && (node as ExportSpecifier).propertyName?.escapedText === InternalSymbolName.Default) {
verbatimTargetName = InternalSymbolName.Default;
}
// targetName is only used when the target is local, as otherwise the target is an alias that points at
// another file
serializeExportSpecifier(
@@ -0,0 +1,15 @@
//// [tests/cases/compiler/declarationEmitJsReExportDefault.ts] ////
//// [package.json]
{"name": "a", "version": "0.0.0"}
//// [index.d.ts]
export const a = 123;
//// [index.mjs]
export {default as mod} from 'a';
//// [index.d.mts]
export { default as mod } from "a";
@@ -0,0 +1,18 @@
// @noTypesAndSymbols: true
// @filename: /node_modules/a/package.json
{"name": "a", "version": "0.0.0"}
// @filename: /node_modules/a/index.d.ts
export const a = 123;
// @filename: /tsconfig.json
{
"compilerOptions": {
"module": "node16",
"declaration": true,
"emitDeclarationOnly": true,
"checkJs": true,
}
}
// @filename: /index.mjs
export {default as mod} from 'a';