Răsfoiți Sursa

fix(compiler-sfc): also search for `.tsx` when type import's extension is omitted (#10637)

Co-authored-by: liuxiaofei <liuxfb@digiwin.com>

Closes #10635
liudaodanOo 2 ani în urmă
părinte
comite
34106bc9c7

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

@@ -561,6 +561,27 @@ describe('resolveType', () => {
       expect(deps && [...deps]).toStrictEqual(Object.keys(files))
       expect(deps && [...deps]).toStrictEqual(Object.keys(files))
     })
     })
 
 
+    // #10635
+    test('relative tsx', () => {
+      const files = {
+        '/foo.tsx': 'export type P = { foo: number }',
+        '/bar/index.tsx': 'export type PP = { bar: string }',
+      }
+      const { props, deps } = resolve(
+        `
+        import { P } from './foo'
+        import { PP } from './bar'
+        defineProps<P & PP>()
+        `,
+        files,
+      )
+      expect(props).toStrictEqual({
+        foo: ['Number'],
+        bar: ['String'],
+      })
+      expect(deps && [...deps]).toStrictEqual(Object.keys(files))
+    })
+
     test.runIf(process.platform === 'win32')('relative ts on Windows', () => {
     test.runIf(process.platform === 'win32')('relative ts on Windows', () => {
       const files = {
       const files = {
         'C:\\Test\\FolderA\\foo.ts': 'export type P = { foo: number }',
         'C:\\Test\\FolderA\\foo.ts': 'export type P = { foo: number }',

+ 2 - 0
packages/compiler-sfc/src/script/resolveType.ts

@@ -956,8 +956,10 @@ function resolveExt(filename: string, fs: FS) {
   return (
   return (
     tryResolve(filename) ||
     tryResolve(filename) ||
     tryResolve(filename + `.ts`) ||
     tryResolve(filename + `.ts`) ||
+    tryResolve(filename + `.tsx`) ||
     tryResolve(filename + `.d.ts`) ||
     tryResolve(filename + `.d.ts`) ||
     tryResolve(joinPaths(filename, `index.ts`)) ||
     tryResolve(joinPaths(filename, `index.ts`)) ||
+    tryResolve(joinPaths(filename, `index.tsx`)) ||
     tryResolve(joinPaths(filename, `index.d.ts`))
     tryResolve(joinPaths(filename, `index.d.ts`))
   )
   )
 }
 }