From: zqran <215244947@qq.com> Date: Tue, 11 Jul 2023 10:35:22 +0000 (+0800) Subject: fix(types): correct withDefaults return type for boolean prop with undefined default... X-Git-Tag: v3.3.5~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f07cb18fedf9a446545aadf76bcdfb957c7ebcbd;p=thirdparty%2Fvuejs%2Fcore.git fix(types): correct withDefaults return type for boolean prop with undefined default value (#8602) --- diff --git a/packages/dts-test/setupHelpers.test-d.ts b/packages/dts-test/setupHelpers.test-d.ts index 77342590dc..934e6056d2 100644 --- a/packages/dts-test/setupHelpers.test-d.ts +++ b/packages/dts-test/setupHelpers.test-d.ts @@ -134,6 +134,26 @@ describe('defineProps w/ generic type declaration + withDefaults', (res.bool) }) +describe('withDefaults w/ boolean type', () => { + const res1 = withDefaults( + defineProps<{ + bool?: boolean + }>(), + { bool: false } + ) + expectType(res1.bool) + + const res2 = withDefaults( + defineProps<{ + bool?: boolean + }>(), + { + bool: undefined + } + ) + expectType(res2.bool) +}) + 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 c00937981d..9320066708 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -303,7 +303,13 @@ type PropsWithDefaults< ? T[K] : NotUndefined : never -} & { readonly [K in BKeys]-?: boolean } +} & { + readonly [K in BKeys]-?: K extends keyof Defaults + ? Defaults[K] extends undefined + ? boolean | undefined + : boolean + : boolean +} /** * Vue `