diff --git a/src/core/vdom/modules/directives.ts b/src/core/vdom/modules/directives.ts index 7d475de1fc5..9e4a87f7f6e 100644 --- a/src/core/vdom/modules/directives.ts +++ b/src/core/vdom/modules/directives.ts @@ -94,7 +94,7 @@ function normalizeDirectives( // $flow-disable-line return res } - let i, dir + let i: number, dir: VNodeDirective for (i = 0; i < dirs.length; i++) { dir = dirs[i] if (!dir.modifiers) { @@ -103,7 +103,7 @@ function normalizeDirectives( } res[getRawDirName(dir)] = dir if (vm._setupState && vm._setupState.__sfc) { - dir.def = resolveAsset(vm, '_setupState', 'v-' + dir.name) + dir.def = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name) } dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true) } diff --git a/types/vnode.d.ts b/types/vnode.d.ts index 59eeb032b77..fabfad44c97 100644 --- a/types/vnode.d.ts +++ b/types/vnode.d.ts @@ -1,4 +1,5 @@ import { Vue } from './vue' +import { DirectiveFunction, DirectiveOptions } from './options' export type ScopedSlot = (props: any) => ScopedSlotReturnValue type ScopedSlotReturnValue = @@ -86,4 +87,5 @@ export interface VNodeDirective { arg?: string oldArg?: string modifiers?: { [key: string]: boolean } + def?: DirectiveFunction | DirectiveOptions }