types: improve directive hook argument types

This commit is contained in:
Evan You 2020-03-18 12:30:20 -04:00
parent aa4ab39c1a
commit be91b43564
2 changed files with 10 additions and 9 deletions

View File

@ -28,11 +28,11 @@ export interface DirectiveBinding {
dir: ObjectDirective
}
export type DirectiveHook<T = any> = (
export type DirectiveHook<T = any, Prev = VNode<any, T> | null> = (
el: T,
binding: DirectiveBinding,
vnode: VNode<any, T>,
prevVNode: VNode<any, T> | null
prevVNode: Prev
) => void
export type SSRDirectiveHook = (
@ -41,12 +41,12 @@ export type SSRDirectiveHook = (
) => Data | undefined
export interface ObjectDirective<T = any> {
beforeMount?: DirectiveHook<T>
mounted?: DirectiveHook<T>
beforeUpdate?: DirectiveHook<T>
updated?: DirectiveHook<T>
beforeUnmount?: DirectiveHook<T>
unmounted?: DirectiveHook<T>
beforeMount?: DirectiveHook<T, null>
mounted?: DirectiveHook<T, null>
beforeUpdate?: DirectiveHook<T, VNode<any, T>>
updated?: DirectiveHook<T, VNode<any, T>>
beforeUnmount?: DirectiveHook<T, null>
unmounted?: DirectiveHook<T, null>
getSSRProps?: SSRDirectiveHook
}

View File

@ -1,6 +1,7 @@
import {
ObjectDirective,
VNode,
DirectiveHook,
DirectiveBinding,
warn
} from '@vue/runtime-core'
@ -240,7 +241,7 @@ function callModelHook(
modelToUse = vModelText
}
}
const fn = modelToUse[hook]
const fn = modelToUse[hook] as DirectiveHook
fn && fn(el, binding, vnode, prevVNode)
}