diff --git a/src/event/utils.ts b/src/event/utils.ts index b29ffc50..9b489ebd 100644 --- a/src/event/utils.ts +++ b/src/event/utils.ts @@ -2,6 +2,7 @@ import type { EventHandler, LazyEventHandler, EventHandlerRequest, + EventHandlerResponse, } from "../types"; export function defineEventHandler< @@ -12,7 +13,7 @@ export function defineEventHandler< // This signature provides backwards compatibility with previous signature where first generic was return type export function defineEventHandler< Request = EventHandlerRequest, - Response = any + Response = EventHandlerResponse >( handler: EventHandler< Request extends EventHandlerRequest ? Request : any, @@ -24,7 +25,7 @@ export function defineEventHandler< >; export function defineEventHandler< Request extends EventHandlerRequest = EventHandlerRequest, - Response = any + Response = EventHandlerResponse >(handler: EventHandler): EventHandler { handler.__is_handler__ = true; return handler; diff --git a/src/types.ts b/src/types.ts index 733364cf..542ca441 100644 --- a/src/types.ts +++ b/src/types.ts @@ -56,10 +56,10 @@ export type InferEventInput< export interface EventHandler< Request extends EventHandlerRequest = EventHandlerRequest, - Response = EventHandlerResponse + Response extends EventHandlerResponse = EventHandlerResponse > { __is_handler__?: true; - (event: H3Event): EventHandlerResponse; + (event: H3Event): Response; } export type LazyEventHandler = () => EventHandler | Promise; diff --git a/test/types.test-d.ts b/test/types.test-d.ts index 9352477d..7fef91a5 100644 --- a/test/types.test-d.ts +++ b/test/types.test-d.ts @@ -2,8 +2,6 @@ import { describe, it, expectTypeOf } from "vitest"; import type { QueryObject } from "ufo"; import { eventHandler, H3Event, getQuery, readBody } from "../src"; -type MaybePromise = T | Promise; - describe("types", () => { describe("eventHandler", () => { it("return type (inferred)", () => { @@ -12,18 +10,16 @@ describe("types", () => { foo: "bar", }; }); - expectTypeOf(handler({} as H3Event)).toEqualTypeOf< - MaybePromise<{ foo: string }> - >(); + const response = handler({} as H3Event); + expectTypeOf(response).toEqualTypeOf<{ foo: string }>(); }); it("return type (simple generic)", () => { const handler = eventHandler(() => { return ""; }); - expectTypeOf(handler({} as H3Event)).toEqualTypeOf< - MaybePromise - >(); + const response = handler({} as H3Event); + expectTypeOf(response).toEqualTypeOf(); }); });