我刚刚进入Fastify与 typescript ,并真正享受它。
然而,我正在尝试弄清楚我是否可以输入响应负载。我有序列化工作的响应模式,这可能足够了,但我有内部类型化的对象(如IUser),最好有Typescript检查。
下面的代码很好用,但是我想返回一个TUser,如果我返回了不同的东西,我会使用typescript。
interface IUser {
firstname: string,
lastname: string
} // Not in use in example
interface IUserRequest extends RequestGenericInterface {
Params: { username: string };
}
const getUserHandler = async (
req: FastifyRequest<IUserRequest, RawServerBase, IncomingMessage | Http2ServerRequest>
) => {
const { username } = req.params;
return { ... }; // Would like to return instance of IUser
};
app.get<IUserRequest>('/:username', { schema }, helloWorldHandler);
是否有可以为响应扩展的RequestGenericInterface的等效接口?
小更新:看起来reply.send()可以用来添加类型,但是为了自文档化起见,最好提供更高的T。
4条答案
按热度按时间agxfikkp1#
从documentation:
使用这两个接口,定义一个新的API路由并将它们作为泛型传递。简写路由方法(即. get)接受一个包含五个命名属性的泛型对象RouteGenericInterface:一个月一次,一个月一次,一个月二次,一个月三次和一个月四次。
您可以使用
Reply
类型。wnavrhmk2#
在查看了类型定义之后,我发现还有一种替代方法可以只对处理程序进行类型检查(如Julien TASIN的回答),如下所示:
您还可以使用generic创建自己的接口,以保存编写重复行的工作,如下所示:
然后使用如下界面:
e3bfsja23#
如果只想键入处理程序,可以按以下方式执行
tjrkku2a4#
尝试输入这些是一个真正可怕的经验。感谢其他答案,这就是我结束的地方。有点代码转储,使其他人的生活更容易。
有了这个,我将我的响应标准化为可选的
data
和message
。用法
GetRequestHandler
DeleteRequestHandler
PatchRequestHandler