Przeglądaj źródła

fix(compiler-sfc): support resolve multiple re-export /w same source type name (#8365)

close #8364
edison 2 lat temu
rodzic
commit
4fa8da8576

+ 19 - 0
packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts

@@ -615,6 +615,25 @@ describe('resolveType', () => {
       expect(deps && [...deps]).toStrictEqual(Object.keys(files))
       expect(deps && [...deps]).toStrictEqual(Object.keys(files))
     })
     })
 
 
+    test('relative (re-export /w same source type name)', () => {
+      const files = {
+        '/foo.ts': `export default interface P { foo: string }`,
+        '/bar.ts': `export default interface PP { bar: number }`,
+        '/baz.ts': `export { default as X } from './foo'; export { default as XX } from './bar'; `
+      }
+      const { props, deps } = resolve(
+        `import { X, XX } from './baz'
+        defineProps<X & XX>()
+      `,
+        files
+      )
+      expect(props).toStrictEqual({
+        foo: ['String'],
+        bar: ['Number']
+      })
+      expect(deps && [...deps]).toStrictEqual(['/baz.ts', '/foo.ts', '/bar.ts'])
+    })
+
     test('relative (dynamic import)', () => {
     test('relative (dynamic import)', () => {
       const files = {
       const files = {
         '/foo.ts': `export type P = { foo: string, bar: import('./bar').N }`,
         '/foo.ts': `export type P = { foo: string, bar: import('./bar').N }`,

+ 1 - 1
packages/compiler-sfc/src/script/resolveType.ts

@@ -1117,7 +1117,7 @@ function recordTypes(
               const exported = getId(spec.exported)
               const exported = getId(spec.exported)
               if (stmt.source) {
               if (stmt.source) {
                 // re-export, register an import + export as a type reference
                 // re-export, register an import + export as a type reference
-                imports[local] = {
+                imports[exported] = {
                   source: stmt.source.value,
                   source: stmt.source.value,
                   imported: local
                   imported: local
                 }
                 }