Задать вопрос
@Jeux_Onmobil

Как типизировать router.push(pathname)?

Пишу на nextjs 13.4 (app директива)

import { usePathname, useRouter } from 'next/navigation';

export const Component = () => {
    const router = useRouter();
    const pathname = usePathname();
    ...
    router.push(pathname); // получаю ошибку
    ...
}


TS2345: Argument of type 'string | null' is not assignable to parameter of type 'RouteImpl<string | null>'.   Type 'null' is not assignable to type 'RouteImpl<string | null>'.


Дело в том, что RouteImpl уже не экспортировать из next/navigation
  • Вопрос задан
  • 146 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
Проверил чистую установку next 13.4.12 - такой проблемы нет.

Где-то говняет типы роутера. Возможно у тебя отдельно в package.json подключена устаревшая в версия роутера - тогда удали её.
Иначе тыкни Ctrl+Click на .push и тебе откроет файл с декларацией, если она не\не только в next/dist/shared/lib/app-router-context.d.ts - разбирайся откуда взялась левая.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
if (pathname !== null) {
    router.push(pathname);
}
Ответ написан
alexrapro
@alexrapro
Frontend Developer
Ты можешь сделать так:
router.push(`${pathname}`)
Ответ написан
Комментировать
@DjanTanKa
упругий мидлокодер
если кто-то, как и я только что - не получил прямой ответ на прямой вопрос, то вот он ответ:
надо протипизировать роут энамкой, состоящей из папок в вашем app, ибо этот RouteImpl уже содержит в себе названия папок, ктр вы пропишите в app
route: '/route1' | '/route2' | '/route3';
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы