feat(eventlisteners): add missing mult. listeners type

fixes #794

Co-authored-by: Shahar Dawn Or <mightyiampresence@gmail.com>
pull/838/head
patomation 5 years ago committed by Shahar Dawn Or
parent a1052392b1
commit 5a89efe015

@ -1,15 +1,20 @@
import { VNode, VNodeData } from '../vnode'
import { Module } from './module'
type SpecificListener<N extends keyof HTMLElementEventMap> = (ev: HTMLElementEventMap[N]) => void
export type On = {
[N in keyof HTMLElementEventMap]?: (ev: HTMLElementEventMap[N]) => void
[N in keyof HTMLElementEventMap]?: SpecificListener<N> | Array<SpecificListener<N>>
} & {
[event: string]: EventListener
[event: string]: EventListener | EventListener[]
}
function invokeHandler (handler: any, vnode?: VNode, event?: Event): void {
type SomeListener<N extends keyof HTMLElementEventMap> = SpecificListener<N> | EventListener
function invokeHandler<N extends keyof HTMLElementEventMap> (handler: SomeListener<N> | Array<SomeListener<N>>, vnode?: VNode, event?: Event): void {
if (typeof handler === 'function') {
// call function handler
// @ts-expect-error
handler.call(vnode, event, vnode)
} else if (typeof handler === 'object') {
// call multiple handlers

@ -105,6 +105,7 @@ describe('core benchmark', () => {
inputs,
async function subjectToResultReducer (acc: HTMLElement | VNode, input, i) {
const vnode = view(input)
// @ts-expect-error
subject(acc, vnode)
if (i % REQUEST_ANIMATION_FRAME_EVERY_N_PATCHES === 0) {
await new Promise((resolve) => {

@ -81,13 +81,15 @@ describe('event listeners', function () {
// Check that the second argument was a vnode
assert.strictEqual(vnode.sel, 'div')
}
var vnode1 = h('div', { on: { click: [clicked, clicked, clicked] as any } }, [
// @ts-expect-error
var vnode1 = h('div', { on: { click: [clicked, clicked, clicked] } }, [
h('a', 'Click my parent'),
])
elm = patch(vnode0, vnode1).elm
elm.click()
assert.strictEqual(3, called)
var vnode2 = h('div', { on: { click: [clicked, clicked] as any } }, [
// @ts-expect-error
var vnode2 = h('div', { on: { click: [clicked, clicked] } }, [
h('a', 'Click my parent'),
])
elm = patch(vnode1, vnode2).elm

Loading…
Cancel
Save