#Problem with if/else typescript case

4 messages · Page 1 of 1 (latest)

solar quailBOT
#
import { z } from "zod";
//                ^^^^^
// Cannot find module 'zod' or its corresponding type declarations.

export type AnyInput = z.ZodTypeAny | z.ZodNever;

export type MiddlewareArgs<TRequest, TResponse> = {
  request: TRequest;
  response: TResponse;
};

export type AnyMiddlewareArgs = MiddlewareArgs<any, any>;

export type Middleware<
  TMiddlewareArgs extends AnyMiddlewareArgs,
  TInput extends AnyInput,
> = (params: {
  request: TMiddlewareArgs["request"];
  response: TMiddlewareArgs["response"];
  input: z.infer<TInput>;
}) => any;

export type AnyMiddleware = Middleware<AnyMiddlewareArgs, never> | null;

export type Path<TInput extends AnyInput, TMiddleware extends AnyMiddleware> = (
  params: {
    input: z.infer<TInput>;
  } & (TMiddleware extends null
    ? { context?: never }
    : { context: Awaited<ReturnType<TMiddleware>> }),
//                                  ^^^^^^^^^^^
// Type 'TMiddleware' does not satisfy the constraint '(...args: any) => any'.
//   Type 'AnyMiddleware' is not assignable to type '(...args: any) => any'.
//     Type 'null' is not assignable to type '(...args: any) => any'.
) => string[];
deep burrow
#

Please ignore the top zod error message

#

This is the line that gives the error:

TMiddleware extends null
    ? { context?: never }
    : { context: Awaited<ReturnType<TMiddleware>> }
#

It says, TMiddleware can be null, but that is not possible because of the if else ...