Я новичок в TypeScript.
Я получаю сообщение об ошибке. В области видимости для сокращенного свойства firstName не существует значения. Либо объявите его, либо предоставьте инициализатор. при использовании Prisma с Next.js. Я пытаюсь создать нового пользователя в своей БД.
Модель пользователя в schema.prisma
model User {
id Int @id @default(autoincrement())
email String @unique
firstName String
middleName String?
lastName String
dateOfBirth DateTime
mobileNumber String @unique
idType String
idNumber String @unique
idExpirtyDate DateTime
idIssueState DateTime
streetAddress String
suburb String
postCode Int
state String
bsb Int @unique
accountNumber Int @unique
payIdType String
payId String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
createUser() функция, как показано ниже.
export async function createUser(user: FormData) {
const prisma = new PrismaClient()
await prisma.user.create({
data: {
firstName,
lastName,
middleName,
email,
dateOfBirth,
mobileNumber,
idType,
idNumber,
idExpirtyDate,
idIssueState,
streetAdddress,
suburb,
postCode,
state,
bsb,
accountNumber,
payIdType,
payId,
},
})
}
Ниже показано, где я получаю FormData. Это из компонента.
async function handleFormData(userData: FormData) {
'use server'
await createUser(userData)
}
Любая помощь приветствуется.
Да, я только что обновил вопрос. с кодом для FormData. Он поступает непосредственно из формы при отправке формы. <форма action = {handleFormData}>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сокращение {firstName} работает только в том случае, если в области видимости есть переменная с именем firstName, поскольку оно фактически совпадает с {firstName: firstName}.
Вам нужно вручную извлечь параметры из файла FormData.
data : {
firstName: user.get('firstName'),
// etc.
}
В качестве альтернативы, если вы хотите просто передать все значения из FormData, вы можете преобразовать его в объект с помощью Object.fromEntries.
data: Object.fromEntries(user)
Спасибо, понял. Мои входные данные в форме имеют одно и то же имя. <input name = "firstName"... Имеет ли это какое-то значение?
@NadunPerera Нет, не совсем. Имя ввода влияет на имя отправленного параметра (поэтому будет параметр firstName), но вам все равно придется извлекать значение вручную на сервере. Он не будет автоматически создавать для него переменную.
Спасибо. Теперь я получаю сообщение об ошибке Type 'FormDataEntryValue | null» нельзя присвоить типу «строка». Тип 'null' не может быть назначен типу 'string'.ts(2322)
@NadunPerera Простой способ обойти это, если вы уверены, что получаете строки, - это подтвердить это: user.get('firstName') as string.
Откуда вы ожидаете получить значение для
firstName? ОбъектFormData?