diff --git a/packages-private/dts-test/setupHelpers.test-d.ts b/packages-private/dts-test/setupHelpers.test-d.ts index 28b3c01cd0f..64c944e0be2 100644 --- a/packages-private/dts-test/setupHelpers.test-d.ts +++ b/packages-private/dts-test/setupHelpers.test-d.ts @@ -227,6 +227,19 @@ describe('withDefaults w/ boolean type', () => { expectType(res2.bool) }) +describe('withDefaults w/ defineProp type is different from the defaults type', () => { + const res1 = withDefaults( + defineProps<{ + bool?: boolean + }>(), + { bool: false, value: false }, + ) + expectType(res1.bool) + + // @ts-expect-error + res1.value +}) + describe('defineProps w/ runtime declaration', () => { // runtime declaration const props = defineProps({ diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index 7915fa3fd49..90bde3aebd2 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -328,7 +328,9 @@ type PropsWithDefaults< Defaults extends InferDefaults, BKeys extends keyof T, > = Readonly> & { - readonly [K in keyof Defaults]-?: K extends keyof T + readonly [K in keyof Defaults as K extends keyof T + ? K + : never]-?: K extends keyof T ? Defaults[K] extends undefined ? IfAny, T[K]> : NotUndefined