]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(types): fix on* props incorrect type for TS 4.7 (#6216)
authorCarlos Rodrigues <carlos@hypermob.co.uk>
Wed, 6 Jul 2022 08:28:25 +0000 (09:28 +0100)
committerGitHub <noreply@github.com>
Wed, 6 Jul 2022 08:28:25 +0000 (04:28 -0400)
fix #6052

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

index 83446346fabe1f4ae2554eaf12b852dd7b1bc6bf..c9c3ab61e8504e6911862bcc965ffa8ed5ffce34 100644 (file)
@@ -103,7 +103,7 @@ export function defineComponent<
   M extends MethodOptions = {},
   Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
-  E extends EmitsOptions = EmitsOptions,
+  E extends EmitsOptions = {},
   EE extends string = string
 >(
   options: ComponentOptionsWithoutProps<
@@ -130,7 +130,7 @@ export function defineComponent<
   M extends MethodOptions = {},
   Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
-  E extends EmitsOptions = Record<string, any>,
+  E extends EmitsOptions = {},
   EE extends string = string
 >(
   options: ComponentOptionsWithArrayProps<
@@ -168,7 +168,7 @@ export function defineComponent<
   M extends MethodOptions = {},
   Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
-  E extends EmitsOptions = Record<string, any>,
+  E extends EmitsOptions = {},
   EE extends string = string
 >(
   options: ComponentOptionsWithObjectProps<
index 2c4076b9b2df121da6802dfea95172fc5e74d9e1..e3e0f9ebc26912cc664a2888e8c485957b9788e0 100644 (file)
@@ -1163,6 +1163,38 @@ describe('should allow to assign props', () => {
   expectType<JSX.Element>(<Parent {...child.$props} />)
 })
 
+// #6052
+describe('prop starting with `on*` is broken', () => {
+  defineComponent({
+    props: {
+      onX: {
+        type: Function as PropType<(a: 1) => void>,
+        required: true
+      }
+    },
+    setup(props) {
+      expectType<(a: 1) => void>(props.onX)
+      props.onX(1)
+    }
+  })
+
+  defineComponent({
+    props: {
+      onX: {
+        type: Function as PropType<(a: 1) => void>,
+        required: true
+      }
+    },
+    emits: {
+      test: (a: 1) => true
+    },
+    setup(props) {
+      expectType<(a: 1) => void>(props.onX)
+      expectType<undefined | ((a: 1) => any)>(props.onTest)
+    }
+  })
+})
+
 // check if defineComponent can be exported
 export default {
   // function components
@@ -1209,5 +1241,4 @@ declare const MyButton: DefineComponent<
   Readonly<ExtractPropTypes<{}>>,
   {}
 >
-
 ;<MyButton class="x" />