Skip to content

Commit

Permalink
feat(types): support typing directive value via generic argument (#1007)
Browse files Browse the repository at this point in the history
close #998
  • Loading branch information
underfin authored Jun 11, 2020
1 parent e29f0b3 commit 419b86d
Showing 1 changed file with 17 additions and 15 deletions.
32 changes: 17 additions & 15 deletions packages/runtime-core/src/directives.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,18 @@ import { currentRenderingInstance } from './componentRenderUtils'
import { callWithAsyncErrorHandling, ErrorCodes } from './errorHandling'
import { ComponentPublicInstance } from './componentProxy'

export interface DirectiveBinding {
export interface DirectiveBinding<V = any> {
instance: ComponentPublicInstance | null
value: any
oldValue: any
value: V
oldValue: V | null
arg?: string
modifiers: DirectiveModifiers
dir: ObjectDirective
dir: ObjectDirective<any, V>
}

export type DirectiveHook<T = any, Prev = VNode<any, T> | null> = (
export type DirectiveHook<T = any, Prev = VNode<any, T> | null, V = any> = (
el: T,
binding: DirectiveBinding,
binding: DirectiveBinding<V>,
vnode: VNode<any, T>,
prevVNode: Prev
) => void
Expand All @@ -40,19 +40,21 @@ export type SSRDirectiveHook = (
vnode: VNode
) => Data | undefined

export interface ObjectDirective<T = any> {
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>
export interface ObjectDirective<T = any, V = any> {
beforeMount?: DirectiveHook<T, null, V>
mounted?: DirectiveHook<T, null, V>
beforeUpdate?: DirectiveHook<T, VNode<any, T>, V>
updated?: DirectiveHook<T, VNode<any, T>, V>
beforeUnmount?: DirectiveHook<T, null, V>
unmounted?: DirectiveHook<T, null, V>
getSSRProps?: SSRDirectiveHook
}

export type FunctionDirective<T = any> = DirectiveHook<T>
export type FunctionDirective<T = any, V = any> = DirectiveHook<T, any, V>

export type Directive<T = any> = ObjectDirective<T> | FunctionDirective<T>
export type Directive<T = any, V = any> =
| ObjectDirective<T, V>
| FunctionDirective<T, V>

export type DirectiveModifiers = Record<string, boolean>

Expand Down

0 comments on commit 419b86d

Please sign in to comment.