From 964f9f3a1b4556dff57eea2e40936ea10c501b96 Mon Sep 17 00:00:00 2001 From: vaiil Date: Wed, 21 Oct 2020 14:09:11 +0300 Subject: [PATCH] fix(type): vue constructor should not require props with default values (#567) Co-authored-by: vail --- src/component/componentProps.ts | 9 +++++++++ src/component/componentProxy.ts | 19 +++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/component/componentProps.ts b/src/component/componentProps.ts index b4040580..c27ff15f 100644 --- a/src/component/componentProps.ts +++ b/src/component/componentProps.ts @@ -63,3 +63,12 @@ export type ExtractPropTypes = O extends object ? { [K in RequiredKeys]: InferPropType } & { [K in OptionalKeys]?: InferPropType } : { [K in string]: any } + +type DefaultKeys = { + [K in keyof T]: T[K] extends { default: any } ? K : never +}[keyof T] + +// extract props which defined with default from prop options +export type ExtractDefaultPropTypes = O extends object + ? { [K in DefaultKeys]: InferPropType } + : {} diff --git a/src/component/componentProxy.ts b/src/component/componentProxy.ts index d9105f16..82fb044c 100644 --- a/src/component/componentProxy.ts +++ b/src/component/componentProxy.ts @@ -1,4 +1,4 @@ -import { ExtractPropTypes } from './componentProps' +import { ExtractDefaultPropTypes, ExtractPropTypes } from './componentProps' import { ShallowUnwrapRef } from '..' import { Data } from './common' @@ -22,10 +22,16 @@ export type ComponentRenderProxy< D = {}, // return from data() C extends ComputedOptions = {}, M extends MethodOptions = {}, - PublicProps = P + PublicProps = P, + Defaults = {}, + MakeDefaultsOptional extends boolean = false > = { $data: D - $props: Readonly

+ $props: Readonly< + MakeDefaultsOptional extends true + ? Partial & Omit

+ : P & PublicProps + > $attrs: Data } & Readonly

& ShallowUnwrapRef & @@ -39,7 +45,12 @@ type VueConstructorProxy = VueConstructor & { new (...args: any[]): ComponentRenderProxy< ExtractPropTypes, ShallowUnwrapRef, - ExtractPropTypes + ExtractPropTypes, + {}, + {}, + ExtractPropTypes, + ExtractDefaultPropTypes, + true > }