From dc0e8347bf0419c1f2c047beeca626308e6a1967 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 28 Nov 2023 09:53:24 +0000 Subject: [PATCH] refactor(nuxt): use `defineComponent` to infer prop types for router-link stub --- packages/nuxt/src/app/plugins/router.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/nuxt/src/app/plugins/router.ts b/packages/nuxt/src/app/plugins/router.ts index 6920fdea46..680c0a721e 100644 --- a/packages/nuxt/src/app/plugins/router.ts +++ b/packages/nuxt/src/app/plugins/router.ts @@ -1,4 +1,4 @@ -import { h, isReadonly, reactive } from 'vue' +import { defineComponent, h, isReadonly, reactive } from 'vue' import { isEqual, joinURL, parseQuery, parseURL, stringifyParsedURL, stringifyQuery, withoutBase } from 'ufo' import { createError } from 'h3' import { defineNuxtPlugin, useRuntimeConfig } from '../nuxt' @@ -188,10 +188,13 @@ export default defineNuxtPlugin<{ route: Route, router: Router }>({ } } - nuxtApp.vueApp.component('RouterLink', { + nuxtApp.vueApp.component('RouterLink', defineComponent({ functional: true, props: { - to: String, + to: { + type: String, + required: true + }, custom: Boolean, replace: Boolean, // Not implemented @@ -200,15 +203,15 @@ export default defineNuxtPlugin<{ route: Route, router: Router }>({ ariaCurrentValue: String }, setup: (props, { slots }) => { - const navigate = () => handleNavigation(props.to, props.replace) + const navigate = () => handleNavigation(props.to!, props.replace) return () => { - const route = router.resolve(props.to) + const route = router.resolve(props.to!) return props.custom ? slots.default?.({ href: props.to, navigate, route }) : h('a', { href: props.to, onClick: (e: MouseEvent) => { e.preventDefault(); return navigate() } }, slots) } } - }) + })) if (import.meta.client) { window.addEventListener('popstate', (event) => {