Строка не присвоена типу Никогда ошибка в NextJs

'use client'

import { FieldErrors, FieldValues, UseFormRegister } from "react-hook-form";
import { BiDollar } from "react-icons/bi";

interface InputProps {
    id: string;
    label: string;
    type?: string;
    disabled?: boolean;
    formatPrice?: boolean;
    required: boolean;
    register: UseFormRegister<FieldValues>;
    errors: FieldErrors;
}

const Input: React.FC<InputProps> = ({
    id,
    label,
    type = 'text',
    disabled,
    formatPrice,
    required,
    register,
    errors
}) => {
    return (
        <div className = "w-full relative">
            {formatPrice && (
                <BiDollar
                    size = {24}
                    className = "text-neutral-700
                    absolute
                    top-5
                    left-2
                    "
                />
            )}
            <input
                id = {id}
                disabled = {disabled}
                {...register(id, { required })}
                placeholder = ""
                type = {type}
                className = {`
                peer 
                w-full 
                p-4 
                pt-6 
                font-light
                 bg-white border-2 
                 rounded-md 
                 outline-none 
                 transition 
                 disabled:opacity-70
                 disabled:cursor-not-allowed
                 ${formatPrice ? 'pl-9' : 'pl-4'}
                 ${errors[id] ? 'border-rose-500' : 'border-neutral-300'}
                 ${errors[id] ? 'focus:border-rose-500' : 'focus:border-neutral-300'}`
                }
            />
            <label
                className = {
                    `
                absolute
                text-base
                duration-150
                transform
                -translate-y-3
                top-5
                origin-[0]
                ${formatPrice ? 'left-9' : 'left-4'}
                peer-placeholder-shown:scale-100'
                peer-placeholder-shown:translate-y-0
                peer-focus:scale-75
                peer-focus:-translate-y-4
                ${errors[id] ? 'text-rose-500' : 'text-zinc-400'}
                `
                }

            >{label}</label>
        </div>
    )
}

export default Input;

Тип «OmitwithTag<InputProps, keyof PageProps, «default»>» не удовлетворяет ограничению «{[x:string]: никогда;}».

Свойство «id» несовместимо с подписью индекса. Тип «строка» не может быть присвоен типу «никогда».

Ошибка типа: страница «app/comComponents/Input/page.tsx» имеет недопустимый экспорт «по умолчанию»: Тип «InputProps» недействителен.

Примечание. На локальном хосте работает нормально, во время сборки выдает ошибку.

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Имя файла app/components/Input/page.tsx зарезервировано в Next.js для целей маршрутизации. Например, page.{js,jsx,ts,tsx} в каталоге приложения автоматически генерирует маршрут. В этом случае будет создан маршрут /components/Input, что, скорее всего, непреднамеренно.

Поскольку это зарезервированный файл Next.js, Next.js ожидает, что вы экспортируете только некоторые конкретные экспортированные данные, например: компонент по умолчанию, runtime, revalidate, dynamic и т. д.

Экспорт по умолчанию должен представлять собой компонент реагирования, который принимает реквизиты { params, searchParams }. В вашем случае он принимает InputProps, что недопустимо.

Я знаю, что вы хотите сделать компонент многократного использования, а не маршрут. поэтому вы должны переименовать этот файл в незарезервированное имя. Например, назовите его Input.tsx или Input/index.tsx, а не page, layout, route, default, template, not-found.

Лишние файлы (например, компоненты) лучше переместить за пределы каталога app, поскольку он отвечает только за маршрутизацию.

Вместо этой структуры:

.
└── app
    ├── components
    │   └── Input
    │       └── page.tsx
    ├── login
    │   └── page.tsx
    └── register
        └── page.tsx

Сделайте это так:

.
├── app
│   ├── login
│   │   └── page.tsx
│   └── register
│       └── page.tsx
└── components
    └── Input
        └── page.tsx

чтобы избежать подобных конфликтов в будущем

100% работает, спасибо, брат 👍

Atul Patidar 09.05.2024 10:14

Другие вопросы по теме