Browse Source

types(runtime-core): make `this` void in emits validator (#1842)

Aurelius333 5 năm trước cách đây
mục cha
commit
5002ab53d6

+ 1 - 1
packages/runtime-core/src/componentOptions.ts

@@ -106,7 +106,7 @@ export interface ComponentOptionsBase<
   components?: Record<string, PublicAPIComponent>
   directives?: Record<string, Directive>
   inheritAttrs?: boolean
-  emits?: E | EE[]
+  emits?: (E | EE[]) & ThisType<void>
 
   // Internal ------------------------------------------------------------------
 

+ 11 - 0
test-dts/defineComponent.test-d.tsx

@@ -710,6 +710,17 @@ describe('emits', () => {
   const instance = {} as ComponentPublicInstance
   instance.$emit('test', 1)
   instance.$emit('test')
+
+  // `this` should be void inside of emits validators
+  defineComponent({
+    props: ['bar'],
+    emits: {
+      foo(): boolean {
+        // @ts-expect-error
+        return this.bar === 3
+      }
+    }
+  })
 })
 
 describe('componentOptions setup should be `SetupContext`', () => {