From b287aeec3ea85f20e4b1fc3d907c901bdc2a0176 Mon Sep 17 00:00:00 2001 From: Zhaolin Liang Date: Wed, 17 Jul 2024 15:06:14 +0800 Subject: [PATCH] fix(compiler-sfc): correctly resolve type annotation for declared function (#11279) close #11266 --- .../compileScript/resolveType.spec.ts | 20 +++++++++++++++++++ .../compiler-sfc/src/script/resolveType.ts | 1 + 2 files changed, 21 insertions(+) diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts index 0b5549cc407..b8b71878e03 100644 --- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts +++ b/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 { + xhr?: T + } + declare function uploadProps(): { + fileList: { + type: PropType[]> + default: UploadFile[] + } + } + type UploadProps = ExtractPropTypes> + defineProps()`) + expect(props).toStrictEqual({ + fileList: ['Array'], + }) + }) + describe('generics', () => { test('generic with type literal', () => { expect( diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index 5a4c84b4ab7..398d3ba9f42 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/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,