router
router copied to clipboard
Extending RouterLink example does not compile in TypeScript
Version
4.0.15
Reproduction link
Steps to reproduce
There's an issue with reactivity in the template when extending the routerlink as per example from the docs: https://router.vuejs.org/guide/advanced/extending-router-link.html
The culprit is the ...RouterLink.props
prop spread, which (for some reason) makes props unavailable to the template unless you destructure the props with toRefs
.
I'm not sure if this a bug in vue-router, a bug in vue, or a limitation/side-effect in general, but the example won't properly build and will throw TS errors (it also throws errors in dev, as you can see in the reproduction).
Uncomment the commented out line with toRefs
to make it all work.
What is expected?
Props to be available in the template with having to destructure them and use toRefs
What is actually happening?
Due to ...RouterLink.props
the props are no longer directly available in the template.
Again: not sure if it's a bug, or a limitation of sorts. At least it would be good to add this to the docs if it isn't a bug.
This is a current limitation but I think it could be improved
@TheDutchCoder To avoid loss of reactivity, I specify the "to" object in the props
export default defineComponent({
props: {
to: {
type: Object as PropType<RouteLocationPathRaw>,
required: true
},
},
setup(props) {
const {
isActive, href, navigate
} = useLink(props);
return {
href,
navigate
};
}
});