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

types: improve directive hook argument types

Evan You 6 лет назад
Родитель
Сommit
be91b43564

+ 8 - 8
packages/runtime-core/src/directives.ts

@@ -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
 }
 

+ 2 - 1
packages/runtime-dom/src/directives/vModel.ts

@@ -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)
 }