@antv/x6
Version:
JavaScript diagramming library that uses SVG and HTML for rendering
40 lines (30 loc) • 960 B
text/typescript
import {
RequiredKeys,
OmitByValue,
OptionalKeys,
PickByValue,
} from 'utility-types'
export type Handler<Args> = Args extends null | undefined
? () => any
: Args extends any[]
? (...args: Args) => any
: (args: Args) => any
export type EventArgs = { [key: string]: any }
export type EventNames<M extends EventArgs> = Extract<keyof M, string>
/**
* Get union type of keys from `M` that value matching `any[]`.
*/
export type NamesWithArrayArgs<M extends EventArgs> = RequiredKeys<
PickByValue<M, any[]>
>
export type NotArrayValueMap<M extends EventArgs> = OmitByValue<M, any[]>
export type OptionalNormalNames<M extends EventArgs> = OptionalKeys<
NotArrayValueMap<M>
>
export type RequiredNormalNames<M extends EventArgs> = RequiredKeys<
NotArrayValueMap<M>
>
export type OtherNames<M extends EventArgs> = EventNames<
PickByValue<M, undefined>
>
export type UnknownNames<M extends EventArgs> = Exclude<string, EventNames<M>>