From: Evan You Date: Fri, 14 Jun 2024 15:46:50 +0000 (+0200) Subject: fix(compiler-sfc): support @vue-ignore comment on more type sources X-Git-Tag: v3.4.29~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a23e99bedf1d65841d162951f10ce35b907a5680;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-sfc): support @vue-ignore comment on more type sources --- diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts index 608549de6f..0b5549cc40 100644 --- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts @@ -137,6 +137,18 @@ describe('resolveType', () => { }) }) + test('intersection type with ignore', () => { + expect( + resolve(` + type Foo = { foo: number } + type Bar = { bar: string } + defineProps() + `).props, + ).toStrictEqual({ + foo: ['Number'], + }) + }) + // #7553 test('union type', () => { expect( diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index ce0be17425..5a4c84b4ab 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -165,6 +165,12 @@ function innerResolveTypeElements( scope: TypeScope, typeParameters?: Record, ): ResolvedElements { + if ( + node.leadingComments && + node.leadingComments.some(c => c.value.includes('@vue-ignore')) + ) { + return { props: {} } + } switch (node.type) { case 'TSTypeLiteral': return typeElementsToMap(ctx, node.members, scope, typeParameters) @@ -414,12 +420,6 @@ function resolveInterfaceMembers( ) if (node.extends) { for (const ext of node.extends) { - if ( - ext.leadingComments && - ext.leadingComments.some(c => c.value.includes('@vue-ignore')) - ) { - continue - } try { const { props, calls } = resolveTypeElements(ctx, ext, scope) for (const key in props) {