]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(types): fix defineComponent props inference when setup() has explicit annotation
authorEvan You <evan@vuejs.org>
Thu, 5 Sep 2024 08:44:25 +0000 (16:44 +0800)
committerEvan You <evan@vuejs.org>
Thu, 5 Sep 2024 08:44:47 +0000 (16:44 +0800)
close #11803

packages-private/dts-test/defineComponent.test-d.tsx
packages/runtime-core/src/apiDefineComponent.ts

index 0124a8b15250b34c1393b932a6cd8a846dd66274..6b9144bf297f56e0eb80b43695d7769a88d055e7 100644 (file)
@@ -1041,6 +1041,18 @@ describe('emits', () => {
     },
   })
 
+  // #11803 manual props annotation in setup()
+  const Hello = defineComponent({
+    name: 'HelloWorld',
+    inheritAttrs: false,
+    props: { foo: String },
+    emits: {
+      customClick: (args: string) => typeof args === 'string',
+    },
+    setup(props: { foo?: string }) {},
+  })
+  ;<Hello onCustomClick={() => {}} />
+
   // without emits
   defineComponent({
     setup(props, { emit }) {
index 0a58954526c9cd3c51656f7c1d7fdba98e99bf0e..5a5f56fe6f7ac11a0472594c5e0280317b8b38d5 100644 (file)
@@ -134,6 +134,9 @@ export type DefineSetupFnComponent<
   S
 >
 
+type ToResolvedProps<Props, Emits extends EmitsOptions> = Readonly<Props> &
+  Readonly<EmitsToProps<Emits>>
+
 // defineComponent is a utility that is primarily used for type inference
 // when declaring components. Type inference is provided in the component
 // options (provided as the argument). The returned value has artificial types
@@ -210,8 +213,6 @@ export function defineComponent<
         : ExtractPropTypes<RuntimePropsOptions>
       : { [key in RuntimePropsKeys]?: any }
     : TypeProps,
-  ResolvedProps = Readonly<InferredProps> &
-    Readonly<EmitsToProps<ResolvedEmits>>,
   TypeRefs extends Record<string, unknown> = {},
 >(
   options: {
@@ -229,7 +230,7 @@ export function defineComponent<
      */
     __typeRefs?: TypeRefs
   } & ComponentOptionsBase<
-    ResolvedProps,
+    ToResolvedProps<InferredProps, ResolvedEmits>,
     SetupBindings,
     Data,
     Computed,
@@ -249,7 +250,7 @@ export function defineComponent<
   > &
     ThisType<
       CreateComponentPublicInstanceWithMixins<
-        ResolvedProps,
+        ToResolvedProps<InferredProps, ResolvedEmits>,
         SetupBindings,
         Data,
         Computed,
@@ -278,7 +279,7 @@ export function defineComponent<
   ResolvedEmits,
   RuntimeEmitsKeys,
   PublicProps,
-  ResolvedProps,
+  ToResolvedProps<InferredProps, ResolvedEmits>,
   ExtractDefaultPropTypes<RuntimePropsOptions>,
   Slots,
   LocalComponents,