diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts
index 924f40a7..c9994922 100644
--- a/packages/runtime-core/src/componentProps.ts
+++ b/packages/runtime-core/src/componentProps.ts
@@ -39,6 +39,7 @@ import { createPropsDefaultThis } from './compat/props'
import { isCompatEnabled, softAssertCompatEnabled } from './compat/compatConfig'
import { DeprecationTypes } from './compat/compatConfig'
import { shouldSkipAttr } from './compat/attrsFallthrough'
+import { IfAny } from './helpers/typeUtils'
export type ComponentPropsOptions
=
| ComponentObjectPropsOptions
@@ -115,7 +116,7 @@ type InferPropType = [T] extends [null]
: InferPropType
: [T] extends [Prop]
? unknown extends V
- ? D
+ ? IfAny
: V
: T
diff --git a/packages/runtime-core/src/helpers/typeUtils.ts b/packages/runtime-core/src/helpers/typeUtils.ts
index 204543e6..8caba54c 100644
--- a/packages/runtime-core/src/helpers/typeUtils.ts
+++ b/packages/runtime-core/src/helpers/typeUtils.ts
@@ -6,3 +6,5 @@ export type UnionToIntersection = (
// make keys required but keep undefined values
export type LooseRequired = { [P in string & keyof T]: T[P] }
+
+export type IfAny = 0 extends (1 & T) ? Y : N
diff --git a/test-dts/component.test-d.ts b/test-dts/component.test-d.ts
index 93c3ea41..d8d3934b 100644
--- a/test-dts/component.test-d.ts
+++ b/test-dts/component.test-d.ts
@@ -10,7 +10,8 @@ import {
ShallowUnwrapRef,
FunctionalComponent,
ComponentPublicInstance,
- toRefs
+ toRefs,
+ IsAny
} from './index'
declare function extractComponentOptions(
@@ -62,6 +63,7 @@ describe('object props', () => {
ffff: Ref<(a: number, b: string) => { a: boolean }>
validated: Ref
object: Ref