Saya sedang membangunkan aplikasi menggunakan NextJS dan Typescript dan cuba menentukan cara terbaik untuk menaip respons MySQL dengan betul. Berikut ialah titik akhir API:
import { hash } from "bcrypt"; import type { NextApiRequest, NextApiResponse } from "next"; import randomstring from "randomstring"; import { executeQuery } from "../../../lib/db"; const Test = async (req: NextApiRequest, res: NextApiResponse) => { // Manage password generation const password = randomstring.generate(16); const hashedPassword = hash(password, 10); // Create new auth using email and password const auth = await executeQuery( "INSERT INTO auth (email, password) VALUES (?, ?)", ["test@test.com", (await hashedPassword).toString()] ); res.statusCode = 200; res.json(auth.insertId); }; export default Test;
Saya ingin menaip dengan kuat insertId
melalui ESLint untuk membuang semua amaran dan ralat, tetapi malangnya, semua usaha saya tidak berjaya. Ralat yang saya terima ialah:
Property 'insertId' does not exist on type 'RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[] | ResultSetHeader | { error: unknown; }'. Property 'insertId' does not exist on type 'RowDataPacket[]'.ts(2339)
Fungsi executeQuery
saya ditakrifkan sebagai:
import mysql from "mysql2/promise"; export const executeQuery = async (query: string, params: unknown[] = []) => { try { const db = await mysql.createConnection({ host: process.env.MYSQL_HOST, database: process.env.MYSQL_DATABASE, user: process.env.MYSQL_USER, password: process.env.MYSQL_PASSWORD, }); const [results] = await db.execute(query, params); db.end(); return results; } catch (error) { return { error }; } };
Salah satu percubaan saya dalam pelaksanaan ialah tindak balas SO ini, tetapi saya tidak dapat melaksanakannya...
Sebarang dan semua bantuan amat dihargai!
Saya juga mengalami masalah yang sama seperti anda Selepas mencari fail jenis mysql2, saya mendapati anda boleh lulus jenis hasil pertanyaan.
Contohnya:
Untuk sisipan dan kemas kini, anda boleh terus menaipnya menggunakan
OkPacket
类型,对于选择,您可以使用RowDataPacket
类型。您可以通过将RowDataPacket
dengan melaksanakan jenis respons yang dijangkakan untuk pertanyaan dan menghantarnya ke dalam fungsi pertanyaan.Contohnya:
Kemudian anda boleh menyampaikannya seperti ini apabila bertanya:
Ini 2 sen saya, harap ia membantu seseorang pada masa hadapan.