]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-sfc): correctly resolve type annotation for declared function (#11279)
authorZhaolin Liang <develop0304@outlook.com>
Wed, 17 Jul 2024 07:06:14 +0000 (15:06 +0800)
committerGitHub <noreply@github.com>
Wed, 17 Jul 2024 07:06:14 +0000 (15:06 +0800)
close #11266

packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts
packages/compiler-sfc/src/script/resolveType.ts

index 0b5549cc4075ae1f40e0f121bbb3502cd676d41a..b8b71878e03009f3a810396cd825b1600b614719 100644 (file)
@@ -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(
index 5a4c84b4ab7b51def10f1c0db53b380215d7b9c1..398d3ba9f42c47e26babec6e44b4e32926b12b0e 100644 (file)
@@ -177,6 +177,7 @@ function innerResolveTypeElements(
     case 'TSInterfaceDeclaration':
       return resolveInterfaceMembers(ctx, node, scope, typeParameters)
     case 'TSTypeAliasDeclaration':
+    case 'TSTypeAnnotation':
     case 'TSParenthesizedType':
       return resolveTypeElements(
         ctx,