From: 三咲智子 Kevin Deng Date: Thu, 2 Feb 2023 02:57:28 +0000 (+0800) Subject: fix(types): optional boolean props should have boolean type in return type of defineP... X-Git-Tag: v3.2.46~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a0a010ddc9ba8ef3e883454c73997bf6fb40b385;p=thirdparty%2Fvuejs%2Fcore.git fix(types): optional boolean props should have boolean type in return type of defineProps (#7619) close #7116 fix #5847 fix #7487 --- diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index 0ab3d252d5..6f6097aa80 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -58,7 +58,13 @@ export function defineProps< PP extends ComponentObjectPropsOptions = ComponentObjectPropsOptions >(props: PP): Readonly> // overload 3: typed-based declaration -export function defineProps(): Readonly +export function defineProps(): Readonly< + Omit> & { + [K in keyof Pick>]-?: NotUndefined< + TypeProps[K] + > + } +> // implementation export function defineProps() { if (__DEV__) { @@ -128,6 +134,12 @@ export function defineExpose< type NotUndefined = T extends undefined ? never : T +type BooleanKey = K extends any + ? [T[K]] extends [boolean | undefined] + ? K + : never + : never + type InferDefaults = { [K in keyof T]?: InferDefault> } @@ -149,7 +161,6 @@ type PropsWithDefaults = Base & { : NotUndefined : never } - /** * Vue `