diff --git a/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineProps.spec.ts.snap b/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineProps.spec.ts.snap index fce04c85112..11367463cd9 100644 --- a/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineProps.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineProps.spec.ts.snap @@ -148,6 +148,27 @@ export default /*@__PURE__*/_defineComponent({ +return { } +} + +})" +`; + +exports[`defineProps > w/ TSTypeAliasDeclaration 1`] = ` +"import { defineComponent as _defineComponent } from 'vue' +type FunFoo = (item: O) => boolean; + type FunBar = FunFoo; + +export default /*@__PURE__*/_defineComponent({ + props: { + foo: { type: Function, required: false, default: () => true }, + bar: { type: Function, required: false, default: () => true } + }, + setup(__props: any, { expose: __expose }) { + __expose(); + + + return { } } diff --git a/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts b/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts index 836badb51c8..dcf6341a9fc 100644 --- a/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts @@ -808,4 +808,30 @@ const props = defineProps({ foo: String }) expect(content).toMatch(`foo: { default: 5.5, type: Number }`) assertCode(content) }) + + test('w/ TSTypeAliasDeclaration', () => { + const { content } = compile(` + + `) + assertCode(content) + expect(content).toMatch( + `foo: { type: Function, required: false, default: () => true }`, + ) + expect(content).toMatch( + `bar: { type: Function, required: false, default: () => true }`, + ) + }) }) diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index 6bb647f11ff..1f3c4d6837c 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -1554,6 +1554,14 @@ export function inferRuntimeType( case 'TSTypeReference': { const resolved = resolveTypeReference(ctx, node, scope) if (resolved) { + if (resolved.type === 'TSTypeAliasDeclaration') { + return inferRuntimeType( + ctx, + resolved.typeAnnotation, + resolved._ownerScope, + isKeyOf, + ) + } return inferRuntimeType(ctx, resolved, resolved._ownerScope, isKeyOf) }