colinhacks / zod

TypeScript-first schema validation with static type inference
https://zod.dev
MIT License
32.91k stars 1.14k forks source link

TypeError: Not assignable to parameter of type ZodType<any, any, any> #2663

Open ernstoarllano opened 1 year ago

ernstoarllano commented 1 year ago

I've created this schema to use in React Hook Form, but I'm getting an error that I'm not sure how to fix.

import { z } from 'zod';

export const schema = z.object({
  email_domains: z.string().min(1, { message: 'At least one domain is required' }),
  add_to_groups: z.string(),
  expires_at: z.string(),
  language: z.string(),
  name: z.string().min(1),
});

export type FormValuesType = z.infer<typeof schema>;
import { zodResolver } from '@hookform/resolvers/zod';
import { FormProvider, useForm } from 'react-hook-form';

import { defaultExpiresAt, defaultName } from '@/lib/invite-links';

import {
  FormValuesType,
  schema,
} from '@/components/InviteLinkCreatePage/schema';

export default function Form() {
  const methods = useForm<FormValuesType>({
    resolver: zodResolver(schema),
    values: {
      email_domains: '',
      add_to_groups: '',
      expires_at: defaultExpiresAt(),
      language: '',
      name: defaultName(),
    },
  });

  const handleSubmit = (data: FormValuesType) => {
    console.log({ data });
  };

  return (
    <FormProvider {...methods}>
      ...
    </FormProvider>
  );
}

The error coming back is:

Argument of type 'ZodObject<{ email_domains: ZodString; add_to_groups: ZodString; expires_at: ZodString; language: ZodString; name: ZodString; }, "strip", ZodTypeAny, { ...; }, { ...; }>' is not assignable to parameter of type 'ZodType<any, any, any>'.
  The types of 'refine(...)._def.typeName' are incompatible between these types.
    Type 'import("/Users/ernstoarllano/Sites/dispel/packages/cweb/node_modules/zod/lib/types").ZodFirstPartyTypeKind.ZodEffects' is not assignable to type 'Zod.ZodFirstPartyTypeKind.ZodEffects'.
      Property 'ZodReadonly' is missing in type 'Zod.ZodFirstPartyTypeKind'.
masonbrothers commented 1 year ago

I am having the same issue. I think it happened because I updated zod from 3.21.4 to 3.22.1

masonbrothers commented 1 year ago

@ernstoarllano Are you using a monorepo by chance? If so, are the versions for zod in all of your package.jsons the same?

ernstoarllano commented 1 year ago

@masonbrothers I am using a monorepo and it appears zod is already included. Removing the extra package did the trick. Was that the case for you as well?

masonbrothers commented 1 year ago

Thanks! I needed zod as a dependency so I just downgraded it to v3.21.4. I think that v3.22.0 and later are not compatible with some dependent libraries (like @hookform/resolvers) due to ZodReadonly.

MiryangJung commented 1 year ago

Thanks! I needed zod as a dependency so I just downgraded it to v3.21.4. I think that v3.22.0 and later are not compatible with some dependent libraries (like @hookform/resolvers) due to ZodReadonly.

Thanks I got exactly the same error in v3.22.1 and v3.22.0 and downgrading to v3.21.4 resolved it

aimdexter commented 1 year ago

I am having the same issue. Downgrading to v3.21.4 resolved it.

masonbrothers commented 1 year ago

I think a solution for zod@3.22.1 was just patched yesterday in react-hook-form/resolvers. https://github.com/react-hook-form/resolvers/commit/e5e73466e0f2e098c022ef9c373d5fa82cea7306#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519L257-R256

It has not been pushed to npm yet.

basilnewagesmb commented 1 year ago

zod@3.21.4 worked for me

jvandenaardweg commented 1 year ago

I think a solution for zod@3.22.1 was just patched yesterday in react-hook-form/resolvers. https://github.com/react-hook-form/resolvers/commit/e5e73466e0f2e098c022ef9c373d5fa82cea7306#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519L257-R256

It has not been pushed to npm yet.

The maintainer just released it. But I can confirm it does not fix the issue :( Same issue with zod@3.22.2 and @hookform/resolvers@3.3.0

ernstoarllano commented 1 year ago

In the context of a monorepo my team was able to fix it by adding a nohoist option to the proper workspace for @hookform/resolvers.

"workspaces": {
    "nohoist": [
      "@hookform/resolvers"
    ]
}
jovanhartono commented 1 year ago

zod@3.21.4 and @hookform/resolvers: ^3.3.0 worked for me

jvandenaardweg commented 1 year ago

In the context of a monorepo my team was able to fix it by adding a nohoist option to the proper workspace for @hookform/resolvers.


"workspaces": {

    "nohoist": [

      "@hookform/resolvers"

    ]

}

I don't understand why this fixes it? Although I have not tried your suggestion, all the related package versions in my monorepo have the same version. So this should not be needed, right?

luc122c commented 1 year ago

I'm still having this issue on v3.21.0 -> 3.22.1. I'm using Zod with VeeValidate in Nuxt. Example below:

const passwordSchema = z.object({
  currentPassword: z.string(),
  newPassword: z.string().min(8),
  confirmNewPassword: z.string().min(8),
});
const validationSchema = toTypedSchema(passwordSchema);

On the last line, I get a TS error on passwordSchema saying:

Argument of type 'ZodObject<{ currentPassword: ZodString; newPassword: ZodString; confirmNewPassword: ZodString; }, "strip", ZodTypeAny, { currentPassword: string; newPassword: string; confirmNewPassword: string; }, { ...; }>' is not assignable to parameter of type 'ZodType<any, ZodTypeDef, any>'.
  The types of 'refine(...)._def.typeName' are incompatible between these types. ts(2345)

I didn't have this error until recently, so I wonder if it is an issue with a related dependency?

gabrielvenegas commented 1 year ago

zod@3.21.4 and @hookform/resolvers: ^3.3.0 worked for me

this is working for me as well, version 3.22.2 of zod was not. Thanks! 🎉

gsusmab commented 1 year ago

zod@3.21.4 and @hookform/resolvers: ^3.3.0 worked for me

Same here

Nedi11 commented 1 year ago

zod@3.21.4 and @hookform/resolvers: ^3.3.0 worked for me

Same here

Same, but why is it broken on the latest version

quyctd commented 1 year ago

Same issue, currently using zod@3.22.2 and @hookform/resolvers: ^3.3.1

christopheeyl commented 1 year ago

Same issue, currently using zod@3.22.2 and @hookform/resolvers: ^3.3.1

Same issue I am now using zod@3.21.4 and @hookform/resolvers: ^3.1.0 Upgrade, reload vscode and it will work

Anmol-Baranwal commented 1 year ago

Developer Community Rocks :)

npm install zod@3.21.4
"@hookform/resolvers": "^3.3.1"

zod@3.21.4 and @hookform/resolvers: ^3.3.0 worked for me

obrunofontana commented 1 year ago

Same, but why is it broken on the latest version

workarround is downgrade to zod@3.21.4

thnks guys

Leorrc commented 11 months ago
"zod": "^3.21.4"
"@hookform/resolvers": "^3.3.1"

this is what worked here, after restarting vscode, thx

indahud commented 11 months ago

This worked for me remove node_modules

pnpm store prune
pnpm install
pedroamuniz commented 11 months ago

I just remove the node modules and the lock file. That worked for me too

ninoM commented 11 months ago

This worked for me remove node_modules

pnpm store prune
pnpm install

This worked for me but wasn't immediately apparent; I had to Reload windows in VS Code.

birdzai commented 11 months ago

Zod v3.22.3 is out and I now get no linting errors 😊 Thanks!

luc122c commented 11 months ago
const passwordSchema = z.object({
  currentPassword: z.string(),
  newPassword: z.string().min(8),
  confirmNewPassword: z.string().min(8),
});
const validationSchema = toTypedSchema(passwordSchema);

I've upgraded to Zod 3.22.3 and it seems to have fixed the issue (or at least changed the error message). With the example above, I now get the message Type instantiation is excessively deep and possibly infinite.ts (2589)

traverse1984 commented 11 months ago

In case anyone else is being daft like me - I encountered this error in my monorepo (turborepo). I had forgotten to install zod to one of the places I was using it.

jvandenaardweg commented 11 months ago

Updating to the latest zod 3.22.4 fixed it for me 👍

hemagome commented 11 months ago

In my case this is my code

  const FormSchema = z.object({
  firstname: z.string({
    required_error: "Nombre es requerido",
  }).min(3, {
    message: "Nombre debe tener al menos 3 letras",
  }),
  lastname: z.string({
    required_error: "Apellidos son requeridos",
  }).min(3, {
    message: "Nombre debe tener al menos 3 letras",
  }),
  cc: z.coerce.number({
    required_error: "Documento es requerido",
    invalid_type_error: "El documento debe ser numérico",
  }).int().gte(10000000, {
    message: "Cedula debe tener al menos 8 digitos",
  }).lte(9999999999, {
    message: "Cedula no puede tener más de 10 digitos",
  }),
  phone: z.coerce.number({
    required_error: "Teléfono requerido",
    invalid_type_error: "El teléfono debe ser numérico",
  }).int().gte(3000000000).lte(3299999999),
  contactPhone: z.coerce.number({
    required_error: "Teléfono requerido",
    invalid_type_error: "El teléfono debe ser numérico",
  }).int().gte(3000000000).lte(3299999999),
  contactName: z.string({
    required_error: "Nombre contacto es requerido",
  }).min(3, {
    message: "Nombre debe tener al menos 3 letras",
  }),
  rh: z.string({
    required_error: "Por favor seleccione un grupo sanguíneo",
  }).min(2).max(3),
  birthdate: z.date({
    required_error: "Fecha de nacimiento es requerida",
  }),
  bio: z
    .string()
    .min(10, {
      message: "Información debe tener al menos 10 carácteres",
    })
    .max(160, {
      message: "Información no debe tener más de 160 carácteres",
    }),
  eps: z.string({
    required_error: "Por favor seleccione una EPS",
  }),
});

  const form = useForm<z.infer<typeof FormSchema>>({
    resolver: zodResolver(FormSchema),
  })

I'm working with Zod 3.22.4, but still have the issue

  Argument of type 'ZodObject<{ firstname: ZodString; lastname: ZodString; cc: ZodNumber; phone: ZodNumber; contactPhone: ZodNumber; contactName: ZodString; rh: ZodString; birthdate: ZodDate; bio: ZodString; eps: ZodString; }, "strip", ZodTypeAny, { ...; }, { ...; }>' is not assignable to parameter of type 'ZodType<any, any, any>'.
  The types of 'refine(...)._def.typeName' are incompatible between these types.
    Type 'import("C:/Users/hemag/OneDrive/Documents/GitHub/volt-riders/node_modules/.pnpm/zod@3.22.4/node_modules/zod/lib/types").ZodFirstPartyTypeKind.ZodEffects' is not assignable to type 'Zod.ZodFirstPartyTypeKind.ZodEffects'.
      Property 'ZodReadonly' is missing in type 'Zod.ZodFirstPartyTypeKind'.ts(2345)
danilo-maida commented 11 months ago

This worked for me remove node_modules

pnpm store prune
pnpm install

This definitely works even with latest packages version:

"zod": "^3.22.4" "@hookform/resolvers": "^3.3.2",

samal-rasmussen commented 11 months ago

3.22.4 and rm -rf node_modules did not fix it for me.

Downgrade to 3.21.4 works.

EDIT: I had a library using 3.21.4 that was exposing a Zod type. Updating the library to 3.22.4 fixed it too. Can now use 3.22.4.

Jaaneek commented 10 months ago

Downgrading to 3.21.4 works for me, 3.22.4 does not.

sonam-serchan commented 10 months ago

3.22.4 not working for me as well

rhmnaulia commented 10 months ago

This worked for me remove node_modules

pnpm store prune
pnpm install

thanks, this works

boian-ivanov commented 10 months ago

My case was in a monorepo with zod types for an express API used with Sveltekit-Superforms where the package wouldn't have context on the zod schemas as they'd be any, but the v3.21.4 version throughout all packages worked wonders 🎉

kevin1193 commented 3 months ago

"zod": "link:@hookform/resolvers/zod"

This works for me.

mysterymosi commented 1 month ago

masonbrothers commented Aug 16, 2023

works thanks 🥲