From 96e473833422342c5ca371ae1aeb186dec9a55e3 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 5 Jun 2024 14:19:31 +0800 Subject: [PATCH] fix(types): respect props with default on instance type when using __typeProps --- packages/dts-test/defineComponent.test-d.tsx | 21 +++++++++++++++++++ .../src/componentPublicInstance.ts | 8 +++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/packages/dts-test/defineComponent.test-d.tsx b/packages/dts-test/defineComponent.test-d.tsx index 0d9aa71dc..79c2e677d 100644 --- a/packages/dts-test/defineComponent.test-d.tsx +++ b/packages/dts-test/defineComponent.test-d.tsx @@ -1972,3 +1972,24 @@ createApp({}).component( }, }), ) + +const Comp = defineComponent({ + props: { + actionText: { + type: {} as PropType, + default: 'Become a sponsor', + }, + }, + __typeProps: {} as { + actionText?: string + }, +}) + +const instance = new Comp() +function expectString(s: string) {} +// instance prop with default should be non-null +expectString(instance.actionText) + +// public prop on $props should be optional +// @ts-expect-error +expectString(instance.$props.actionText) diff --git a/packages/runtime-core/src/componentPublicInstance.ts b/packages/runtime-core/src/componentPublicInstance.ts index 8f244ac1d..d7cfc5bea 100644 --- a/packages/runtime-core/src/componentPublicInstance.ts +++ b/packages/runtime-core/src/componentPublicInstance.ts @@ -292,7 +292,7 @@ export type ComponentPublicInstance< C extends ComputedOptions = {}, M extends MethodOptions = {}, E extends EmitsOptions = {}, - PublicProps = P, + PublicProps = {}, Defaults = {}, MakeDefaultsOptional extends boolean = false, Options = ComponentOptionsBase, @@ -323,7 +323,11 @@ export type ComponentPublicInstance< options?: WatchOptions, ): WatchStopHandle } & ExposedKeys< - IfAny>> & + IfAny< + P, + P, + Readonly & Omit | keyof Defaults> + > & ShallowUnwrapRef & UnwrapNestedRefs & ExtractComputedReturns &