Skip to content

Commit 5dbd6b3

Browse files
fix(types): fix using tuple type as EmitsOptions (#2160)
fix #2159
1 parent 6aa2256 commit 5dbd6b3

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

packages/runtime-core/src/componentEmits.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ export type EmitsOptions = ObjectEmitsOptions | string[]
2828
export type EmitFn<
2929
Options = ObjectEmitsOptions,
3030
Event extends keyof Options = keyof Options
31-
> = Options extends any[]
32-
? (event: Options[0], ...args: any[]) => void
31+
> = Options extends Array<infer V>
32+
? (event: V, ...args: any[]) => void
3333
: {} extends Options // if the emit is empty object (usually the default value for emit) should be converted to function
3434
? (event: string, ...args: any[]) => void
3535
: UnionToIntersection<

test-dts/functionalComponent.test-d.tsx

+9
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,12 @@ const Baz: FunctionalComponent<{}, string[]> = (props, { emit }) => {
6363
}
6464

6565
expectType<Component>(Baz)
66+
67+
const Qux: FunctionalComponent<{}, ['foo', 'bar']> = (props, { emit }) => {
68+
emit('foo')
69+
emit('foo', 1, 2)
70+
emit('bar')
71+
emit('bar', 1, 2)
72+
}
73+
74+
expectType<Component>(Qux)

0 commit comments

Comments
 (0)