Function
formConfig
@ng-forge/dynamic-forms
Type-safe form config builder that ensures schema matches field structure.
This helper function provides type safety when using form-level schemas by automatically inferring the form value type from fields and constraining the schema type parameter accordingly.
When to use:
- When you have a form-level schema and want type safety between fields and schema
- When you prefer function syntax over as const satisfies FormConfig
Note: This is optional. Users who don't need schema type safety can
continue using as const satisfies FormConfig directly.
Signature
function formConfig<
const TFields extends NarrowFields,
TProps extends object = Record<string, unknown>
>(config: Omit<FormConfig<TFields, InferFormValue<TFields>, TProps, unknown>, "schema"> & { schema?: FormSchema<InferFormValue<TFields>>; }): FormConfig<TFields, InferFormValue<TFields>, TProps, unknown>Type Parameters
| Name | Constraint | Default | Description |
|---|---|---|---|
TFields | NarrowFields | - | The field definitions array (narrowed via as const) |
TProps | object | Record<string, unknown> | Optional form-level default props type |
Parameters
| Name | Type | Description |
|---|---|---|
config | Omit<FormConfig<TFields, InferFormValue<TFields>, TProps, unknown>, "schema"> & { schema?: FormSchema<InferFormValue<TFields>>; } | - The form configuration object |
Returns
FormConfig<TFields, InferFormValue<TFields>, TProps, unknown>
Examples
import { z } from 'zod';
import { formConfig } from '@ng-forge/dynamic-forms';
import { standardSchema } from '@ng-forge/dynamic-forms/schema';
const passwordSchema = z.object({
password: z.string().min(8),
confirmPassword: z.string(),
}).refine(
(data) => data.password === data.confirmPassword,
{ message: 'Passwords must match', path: ['confirmPassword'] }
);
const config = formConfig({
schema: standardSchema(passwordSchema),
fields: [
{ key: 'password', type: 'input', label: 'Password', required: true, props: { type: 'password' } },
{ key: 'confirmPassword', type: 'input', label: 'Confirm', required: true, props: { type: 'password' } },
{ key: 'submit', type: 'submit', label: 'Register' },
] as const,
});const config = {
schema: standardSchema(passwordSchema),
fields: [...],
} as const satisfies FormConfig;packages/dynamic-forms/src/lib/helpers/form-config.ts:58