Просмотр исходного кода

fix(compiler-sfc): fix built-in type resolving in external files

close #8244
Evan You 3 лет назад
Родитель
Сommit
6b194bcf3b

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

@@ -475,6 +475,23 @@ describe('resolveType', () => {
       expect(deps && [...deps]).toStrictEqual(Object.keys(files))
     })
 
+    // #8244
+    test('utility type in external file', () => {
+      const files = {
+        '/foo.ts': 'type A = { n?: number }; export type B = Required<A>'
+      }
+      const { props } = resolve(
+        `
+        import { B } from './foo'
+        defineProps<B>()
+      `,
+        files
+      )
+      expect(props).toStrictEqual({
+        n: ['Number']
+      })
+    })
+
     test('relative vue', () => {
       const files = {
         '/foo.vue':

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

@@ -518,7 +518,7 @@ function resolveBuiltin(
   name: GetSetType<typeof SupportedBuiltinsSet>,
   scope: TypeScope
 ): ResolvedElements {
-  const t = resolveTypeElements(ctx, node.typeParameters!.params[0])
+  const t = resolveTypeElements(ctx, node.typeParameters!.params[0], scope)
   switch (name) {
     case 'Partial': {
       const res: ResolvedElements = { props: {}, calls: t.calls }