From: Daniel Roe Date: Tue, 2 Sep 2025 09:03:16 +0000 (+0100) Subject: fix(compiler-sfc): support global augments with named exports (#13789) X-Git-Tag: v3.5.21~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=35da3c6dcb30030ef60fa22e30aa83a56e396c60;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-sfc): support global augments with named exports (#13789) --- diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts index c0f4db8208..b0ab826728 100644 --- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts @@ -1342,6 +1342,33 @@ describe('resolveType', () => { expect(deps && [...deps]).toStrictEqual(Object.keys(files)) }) + test('global types with named exports', () => { + const files = { + '/global.d.ts': ` + declare global { + export interface ExportedInterface { foo: number } + export type ExportedType = { bar: boolean } + } + export {} + `, + } + + const globalTypeFiles = { globalTypeFiles: Object.keys(files) } + + expect( + resolve(`defineProps()`, files, globalTypeFiles) + .props, + ).toStrictEqual({ + foo: ['Number'], + }) + + expect( + resolve(`defineProps()`, files, globalTypeFiles).props, + ).toStrictEqual({ + bar: ['Boolean'], + }) + }) + test('global types with ambient references', () => { const files = { // with references diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index d8f4307005..d24e3bbcf7 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -1296,7 +1296,12 @@ function recordTypes( } } else if (stmt.type === 'TSModuleDeclaration' && stmt.global) { for (const s of (stmt.body as TSModuleBlock).body) { - recordType(s, types, declares) + if (s.type === 'ExportNamedDeclaration' && s.declaration) { + // Handle export declarations inside declare global + recordType(s.declaration, types, declares) + } else { + recordType(s, types, declares) + } } } } else {