Field validation functions currently do not type their `value` arg. This is because the underlying `FieldBase` type breaks the type inferences for these functions. The fix is to `Omit` the `validate` property from this type before overriding it with our own, typed version for each field. Here's an example of the problem: <img width="373" alt="Screenshot 2024-09-16 at 2 50 10 PM" src="https://github.com/user-attachments/assets/a99e32fb-5645-4df6-82f2-0efab26b9831"> Here's an example of the fix: <img width="363" alt="Screenshot 2024-09-16 at 3 59 42 PM" src="https://github.com/user-attachments/assets/f83909bc-2169-4378-b5a7-5cca78b6ad64"> This PR also fixes the `hasMany` type inferences (shown above), where the `value` type changes to an array when this property is set. Here's a minimal example of the solution: ```ts export type NumberField = { type: 'number' } & ( | { hasMany: true validate?: Validate<number[], unknown, unknown, NumberField> } | { hasMany?: false | undefined validate?: Validate<number, unknown, unknown, NumberField> } ) ``` ```ts { type: 'text', validate: (value) => '' // value is `string` }, { type: 'text', hasMany: true, validate: (value) => '' // value is `string[]` } ``` Disclaimer: in order for these types to properly infer their values, `strictNullChecks: true` must be set in your `tsconfig.json`. This is _not_ currently set in the Payload Monorepo, but consuming apps _should_ have this defined in order properly infer these types. This PR also adds stronger types for misc. untyped values such as the `point` field, etc.
Payload Redirects Plugin
A plugin for Payload to easily manage your redirects from within your admin panel.