Skip to content

Commit 83e9abd

Browse files
committed
types(defineComponent): Support emit when using functionalComponent
1 parent 9c23ddf commit 83e9abd

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

packages/runtime-core/src/apiDefineComponent.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,14 @@ export type DefineComponent<
8080

8181
// overload 1: direct setup function
8282
// (uses user defined props interface)
83-
export function defineComponent<Props, RawBindings = object>(
83+
export function defineComponent<
84+
Props,
85+
RawBindings = object,
86+
E extends EmitsOptions = {}
87+
>(
8488
setup: (
8589
props: Readonly<Props>,
86-
ctx: SetupContext
90+
ctx: SetupContext<E>
8791
) => RawBindings | RenderFunction
8892
): DefineComponent<Props, RawBindings>
8993

test-dts/component.test-d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,15 @@ describe('functional', () => {
410410

411411
expectType<number>(props.foo)
412412
})
413+
414+
describe('emit', () => {
415+
const MyComponent: FunctionalComponent<
416+
{ foo: number },
417+
{ ev: (a: string) => void }
418+
> = (_, _2) => {}
419+
420+
defineComponent(MyComponent)
421+
})
413422
})
414423

415424
declare type VueClass<Props = {}> = {

0 commit comments

Comments
 (0)