Просмотр исходного кода

fix(types): fix using tuple type as EmitsOptions (#2160)

fix #2159
wonderful-panda 5 лет назад
Родитель
Сommit
5dbd6b36a0

+ 2 - 2
packages/runtime-core/src/componentEmits.ts

@@ -28,8 +28,8 @@ export type EmitsOptions = ObjectEmitsOptions | string[]
 export type EmitFn<
   Options = ObjectEmitsOptions,
   Event extends keyof Options = keyof Options
-> = Options extends any[]
-  ? (event: Options[0], ...args: any[]) => void
+> = Options extends Array<infer V>
+  ? (event: V, ...args: any[]) => void
   : {} extends Options // if the emit is empty object (usually the default value for emit) should be converted to function
     ? (event: string, ...args: any[]) => void
     : UnionToIntersection<

+ 9 - 0
test-dts/functionalComponent.test-d.tsx

@@ -63,3 +63,12 @@ const Baz: FunctionalComponent<{}, string[]> = (props, { emit }) => {
 }
 
 expectType<Component>(Baz)
+
+const Qux: FunctionalComponent<{}, ['foo', 'bar']> = (props, { emit }) => {
+  emit('foo')
+  emit('foo', 1, 2)
+  emit('bar')
+  emit('bar', 1, 2)
+}
+
+expectType<Component>(Qux)