diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts index dd47344277c..f671541977b 100644 --- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts @@ -574,6 +574,47 @@ describe('resolveType', () => { expect(deps && [...deps]).toStrictEqual(Object.keys(files)) }) + test('relative (default export)', () => { + const files = { + '/foo.ts': `export default interface P { foo: string }`, + '/bar.ts': `type X = { bar: string }; export default X` + } + const { props, deps } = resolve( + ` + import P from './foo' + import X from './bar' + defineProps
() + `, + files + ) + expect(props).toStrictEqual({ + foo: ['String'], + bar: ['String'] + }) + expect(deps && [...deps]).toStrictEqual(Object.keys(files)) + }) + + test('relative (default re-export)', () => { + const files = { + '/bar.ts': `export { default } from './foo'`, + '/foo.ts': `export default interface P { foo: string }; export interface PP { bar: number }`, + '/baz.ts': `export { PP as default } from './foo'` + } + const { props, deps } = resolve( + ` + import P from './bar' + import PP from './baz' + defineProps
()
+ `,
+ files
+ )
+ expect(props).toStrictEqual({
+ foo: ['String'],
+ bar: ['Number']
+ })
+ expect(deps && [...deps]).toStrictEqual(Object.keys(files))
+ })
+
test('relative (dynamic import)', () => {
const files = {
'/foo.ts': `export type P = { foo: string, bar: import('./bar').N }`,
diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts
index 775aa41ff83..f4e1915255e 100644
--- a/packages/compiler-sfc/src/script/resolveType.ts
+++ b/packages/compiler-sfc/src/script/resolveType.ts
@@ -1144,6 +1144,18 @@ function recordTypes(
stmt.source.value
)
Object.assign(scope.exportedTypes, sourceScope.exportedTypes)
+ } else if (stmt.type === 'ExportDefaultDeclaration' && stmt.declaration) {
+ if (stmt.declaration.type !== 'Identifier') {
+ recordType(stmt.declaration, types, declares, 'default')
+ recordType(
+ stmt.declaration,
+ exportedTypes,
+ exportedDeclares,
+ 'default'
+ )
+ } else if (types[stmt.declaration.name]) {
+ exportedTypes['default'] = types[stmt.declaration.name]
+ }
}
}
}
@@ -1160,13 +1172,14 @@ function recordTypes(
function recordType(
node: Node,
types: Record