diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index 155c8cd19cc..a8b7fcdef31 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -139,7 +139,7 @@ type InferDefault = T extends | boolean | symbol | Function - ? T + ? T | ((props: P) => T) : (props: P) => T type PropsWithDefaults = Base & { diff --git a/test-dts/setupHelpers.test-d.ts b/test-dts/setupHelpers.test-d.ts index 155ba337dcf..6b9c67b2897 100644 --- a/test-dts/setupHelpers.test-d.ts +++ b/test-dts/setupHelpers.test-d.ts @@ -28,12 +28,14 @@ describe('defineProps w/ type declaration + withDefaults', () => { obj?: { x: number } fn?: (e: string) => void x?: string + genStr?: string }>(), { number: 123, arr: () => [], obj: () => ({ x: 123 }), - fn: () => {} + fn: () => {}, + genStr: () => '' } ) @@ -43,6 +45,7 @@ describe('defineProps w/ type declaration + withDefaults', () => { res.fn('hi') // @ts-expect-error res.x.slice() + res.genStr.slice() }) describe('defineProps w/ union type declaration + withDefaults', () => { @@ -51,11 +54,13 @@ describe('defineProps w/ union type declaration + withDefaults', () => { union1?: number | number[] | { x: number } union2?: number | number[] | { x: number } union3?: number | number[] | { x: number } + union4?: number | number[] | { x: number } }>(), { union1: 123, union2: () => [123], - union3: () => ({ x: 123 }) + union3: () => ({ x: 123 }), + union4: () => 123, } ) })