mirror of
https://github.com/vuejs/vue.git
synced 2024-11-21 20:28:54 +00:00
adf3ac8adc
These are added because Vue 2 does not include listeners in `context.attrs` so there is no way to access the equivalent of `this.$listeners` in `setup()`.
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { VNode } from './vnode'
|
|
import { Data, UnionToIntersection } from './common'
|
|
import { Vue } from './vue'
|
|
|
|
export type Slot = (...args: any[]) => VNode[]
|
|
|
|
export type Slots = Record<string, Slot | undefined>
|
|
|
|
export type ObjectEmitsOptions = Record<
|
|
string,
|
|
((...args: any[]) => any) | null
|
|
>
|
|
|
|
export type EmitsOptions = ObjectEmitsOptions | string[]
|
|
|
|
export type EmitFn<
|
|
Options = ObjectEmitsOptions,
|
|
Event extends keyof Options = keyof Options,
|
|
ReturnType extends void | Vue = void
|
|
> = Options extends Array<infer V>
|
|
? (event: V, ...args: any[]) => ReturnType
|
|
: {} extends Options // if the emit is empty object (usually the default value for emit) should be converted to function
|
|
? (event: string, ...args: any[]) => ReturnType
|
|
: UnionToIntersection<
|
|
{
|
|
[key in Event]: Options[key] extends (...args: infer Args) => any
|
|
? (event: key, ...args: Args) => ReturnType
|
|
: (event: key, ...args: any[]) => ReturnType
|
|
}[Event]
|
|
>
|
|
|
|
export interface SetupContext<E extends EmitsOptions = {}> {
|
|
attrs: Data
|
|
/**
|
|
* Equivalent of `this.$listeners`, which is Vue 2 only.
|
|
*/
|
|
listeners: Record<string, Function | Function[]>
|
|
slots: Slots
|
|
emit: EmitFn<E>
|
|
expose(exposed?: Record<string, any>): void
|
|
}
|