Handler
和 Handlers
类型的文档:
export type Handler<T = any, State = Record<string, unknown>> = (
req: Request,
ctx: FreshContext<State, T>,
) => Response | Promise<Response>;
export type Handlers<T = any, State = Record<string, unknown>> = {
[K in router.KnownMethod]?: Handler<T, State>;
};
来自 自定义处理程序 |新鲜文档:
处理程序可以有两种形式:普通函数(所有 HTTP 方法的包罗万象)或普通对象,其中每个属性都是由它处理的 HTTP 方法命名的函数。
通过这个例子:
export const handler: Handlers = {
async GET(_req, ctx) {
const resp = await ctx.render();
resp.headers.set("X-Custom-Header", "Hello");
return resp;
},
};
所以我认为
Handlers
是对象版本,Handler
是函数版本。不过,我不知道它们的类型变量是什么意思。我猜它们是响应的类型,但是这个测试没有给我带来错误:
export const handler: Handlers<number> = {
GET() {
return new Response('a string')
}
}
那么如何正确使用它们呢?
仔细看
Handler
:
export type Handler<T = any, State = Record<string, unknown>> = (
req: Request,
ctx: FreshContext<State, T>,
) => Response | Promise<Response>;
类型变量
T
和 State
用于 FreshContext
。由于 HTTP 响应只是一个字符串,因此 Response
不需要有任何类型变量。因此,它的类型变量只是帮助您记住您拥有的上下文类型,而不影响 return
语句。