From f5af09f4754858e1c8f80685ac1d8cb105e9b732 Mon Sep 17 00:00:00 2001 From: Travis Date: Sat, 12 Nov 2022 16:15:26 +0800 Subject: [PATCH 1/8] fix(runtime-core): return boolean type when use `defineProps` to set optional boolean prop --- packages/runtime-core/src/apiSetupHelpers.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index 0ab3d252d55..1df55bfc440 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -58,7 +58,19 @@ export function defineProps< PP extends ComponentObjectPropsOptions = ComponentObjectPropsOptions >(props: PP): Readonly> // overload 3: typed-based declaration -export function defineProps(): Readonly +// The Boolean absent props will be cast to false, so the return type +// must be a boolean type +export function defineProps(): Readonly< + { + [K in keyof TypeProps as TypeProps[K] extends boolean | undefined + ? K + : never]-?: TypeProps[K] + } & { + [K in keyof TypeProps as TypeProps[K] extends boolean | undefined + ? never + : K]: TypeProps[K] + } +> // implementation export function defineProps() { if (__DEV__) { From 859abae91e3969e6a32115f5bca76334414c4a4c Mon Sep 17 00:00:00 2001 From: Travis Date: Sat, 12 Nov 2022 17:32:34 +0800 Subject: [PATCH 2/8] ci rebuild From 054f71d62588cab2d0ae9c58d6db064f2f032945 Mon Sep 17 00:00:00 2001 From: Travis Date: Sat, 12 Nov 2022 17:36:17 +0800 Subject: [PATCH 3/8] ci rebuild From 151cc562e73618c78ea25f2f1af5834c2cde6495 Mon Sep 17 00:00:00 2001 From: Travis Date: Sat, 12 Nov 2022 19:10:31 +0800 Subject: [PATCH 4/8] fix(runtime-core): add the judgment of default value by `withDefaults` --- packages/runtime-core/src/apiSetupHelpers.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index 1df55bfc440..9db0d790db6 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -154,12 +154,18 @@ type InferDefault = T extends ? T | ((props: P) => T) : (props: P) => T -type PropsWithDefaults = Base & { - [K in keyof Defaults]: K extends keyof Base +type PropsWithDefaults = { + [K in keyof Base as K extends keyof Defaults ? Defaults[K] extends undefined - ? Base[K] - : NotUndefined - : never + ? never + : K + : K]: Base[K] +} & { + [K in keyof Base as K extends keyof Defaults + ? Defaults[K] extends undefined + ? K + : never + : never]?: Base[K] | undefined } /** From df5656feb88d738e3fd16e8a0a40ec56142542c5 Mon Sep 17 00:00:00 2001 From: Travis Date: Sat, 12 Nov 2022 19:43:18 +0800 Subject: [PATCH 5/8] fix(runtime-core): fix defaults error --- packages/runtime-core/src/apiSetupHelpers.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index 9db0d790db6..d0f7c3e5c65 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -58,7 +58,7 @@ export function defineProps< PP extends ComponentObjectPropsOptions = ComponentObjectPropsOptions >(props: PP): Readonly> // overload 3: typed-based declaration -// The Boolean absent props will be cast to false, so the return type +// the Boolean absent props will be cast to false, so the return type // must be a boolean type export function defineProps(): Readonly< { @@ -159,14 +159,22 @@ type PropsWithDefaults = { ? Defaults[K] extends undefined ? never : K - : K]: Base[K] + : K]: Base[K]; } & { [K in keyof Base as K extends keyof Defaults ? Defaults[K] extends undefined ? K : never - : never]?: Base[K] | undefined -} + : never]?: Base[K] | undefined; +} & Readonly<{ + [K in keyof Defaults as Defaults[K] extends undefined + ? never + : K]: K extends keyof Base + ? Defaults[K] extends undefined + ? Base[K] + : NotUndefined + : never; +}> /** * Vue `