javascript 类型“string”不能赋值给NEXT.JS(typescript)中的类型“Message”

icomxhvb  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(184)

我正在尝试使用Next.Js作为练习,同时使用typedefinitions和“upstash,无服务器访问Redis数据库”来创建一个messenger的克隆。我使用Node.js(已经在upstash的控制台上给出了),通过Next.Js和Upstash控制台提供的文档完成了整个过程。我的消息类型定义如下:(打字.d.ts)

export type Message = {
    id: string,
    message: string,
    created_at: number,
    username: string,
    profilePic: string,
    email: string,
  };

现在,为了“addMessages”我已经使用了API处理过程(异步承诺),并创建了以下内容:

// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
import type { NextApiRequest, NextApiResponse } from 'next'
import redis from '../../redis';
import { Message }  from '../../typings';

type Data = {
    message: Message;
}

type ErrorData = {
    body: string
}

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse<Data | ErrorData>
) {
    if(req.method != 'POST') {
        res.status(405).json({ body: "Method Not Allowed"
    });
    return;
    }

    const  { message }  = req.body;

    const newMessage = {
        ...message,
        //Replace the timestamp of the user to the timestamp of the server
        created_at: Date.now(),
    };
    // Push to upstash redis db

    await redis.hset("messages", message.id, JSON.stringify(newMessage));

  res.status(200).json({ message: "newMessage" })
}

类型数据={消息:消息;}”和代码的最后一行“res.status(200).json({消息:“新消息”})
只要我点击保存它给出以下错误:类型“string”不能赋值给类型“Message”。我已经尝试了硬重新加载,但错误仍然存在。在我点击前端上的随机消息时,控制台给出了以下错误:'“侦听器通过返回true指示异步响应,但消息通道在收到响应之前关闭”'我已经检查了upstash的控制台,请帮助我。谢谢。

hpxqektj

hpxqektj1#

这是因为你的Data接口需要一个以message为键,以Message接口为值的对象,而你却试图发送一个字符串newMessage
所以你可以做三件事:
1.我看到你有一个newMessage对象,所以不要发送字符串"newMessage",而是发送newMessage对象,如下所示:

res.status(200).json({ message: newMessage });

1.设置Data的类型为

type Data=Message

这样,您可以将消息作为

res.status(200).json({ message: "newMessage" });

1.在嵌套键值对中发送消息

res.status(200).json({ message: {message: "newMessage" });

我会推荐第一个或第二个。
另外,如果您选择只发送一个字符串,typescript可能会抱怨Message接口中的其他字段丢失,我建议您将它们设置为可选字段。

相关问题