Reputation: 436
I would like to ask a question about Vue's custom directives. As a fan of Typescript, I want to use this feature with type support, yet I could not find any solutions neither on the web nor on the chat.
<button v-clickOutside="myFunc"> Click Outside </button>
When I write my code like this, and add clickOutside directive to Vue, it works without any problem. Yet the clickOutside has no type support, no auto-complete support and it is recognized as any.
To define, I followed the documentation of Vue.
app.directive('clickOutside', (el, binding) => {
// My code is here.
})
Upvotes: 6
Views: 7787
Reputation: 1564
You can import DirectiveBinding
and also VNode
types from Vue
import { DirectiveBinding , VNode } from 'vue';
const vClickOutside = {
mounted:(el:HTMLElement, binding:DirectiveBinding, vnode:VNode){
// do something
}
}
Upvotes: 3
Reputation: 285
This is possible using the Directive<T,V>
type even though its poorly documented.
import { Directive } from 'vue'
The type takes two type arguments, one for the element type T
and one for the binding value V
. Use it like this:
app.directive<HTMLElement, string>('clickOutside', {
mounted (el, { value }) {
// el: HTMLElement
// value: string
}
})
Upvotes: 9
Reputation: 138276
Typing custom global directives is currently not yet supported, but there's an open Pull Request to add support for it.
Upvotes: 7