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,
}
)
})