From 44973bb3e790db7d8aa7af4eda21c80cac73a8de Mon Sep 17 00:00:00 2001 From: yangxiuxiu <79584569+yangxiuxiu1115@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:29:43 +0800 Subject: [PATCH] fix(types): strip non-prop default values from return type of withDefaults (#9998) close #9899 --- packages-private/dts-test/setupHelpers.test-d.ts | 13 +++++++++++++ packages/runtime-core/src/apiSetupHelpers.ts | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages-private/dts-test/setupHelpers.test-d.ts b/packages-private/dts-test/setupHelpers.test-d.ts index 28b3c01cd..64c944e0b 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 7915fa3fd..90bde3aeb 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