Преглед изворни кода

fix(compiler-sfc): correctly resolve type annotation for declared function (#11279)

close #11266
Zhaolin Liang пре 1 година
родитељ
комит
b287aeec3e

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

@@ -635,6 +635,26 @@ describe('resolveType', () => {
     })
   })
 
+  // #11266
+  test('correctly parse type annotation for declared function', () => {
+    const { props } = resolve(`
+    import { ExtractPropTypes } from 'vue'
+    interface UploadFile<T = any> {
+      xhr?: T
+    }
+    declare function uploadProps<T = any>(): {
+      fileList: {
+        type: PropType<UploadFile<T>[]>
+        default: UploadFile<T>[]
+      }
+    }
+    type UploadProps = ExtractPropTypes<ReturnType<typeof uploadProps>>
+    defineProps<UploadProps>()`)
+    expect(props).toStrictEqual({
+      fileList: ['Array'],
+    })
+  })
+
   describe('generics', () => {
     test('generic with type literal', () => {
       expect(

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

@@ -177,6 +177,7 @@ function innerResolveTypeElements(
     case 'TSInterfaceDeclaration':
       return resolveInterfaceMembers(ctx, node, scope, typeParameters)
     case 'TSTypeAliasDeclaration':
+    case 'TSTypeAnnotation':
     case 'TSParenthesizedType':
       return resolveTypeElements(
         ctx,