Skip to content
Playground Form Builder

Form value type inference

You can use json-schema-to-ts to infer types from JSON schema.

Terminal window
npm i -D json-schema-to-ts
import { createForm, type Schema } from "@sjsf/form";
import type { FromSchema } from "json-schema-to-ts";
import * as defaults from "@/lib/form/defaults";
const schema = {
type: "object",
title: "Form title",
properties: {
text: {
type: "string",
title: "Text input",
},
},
required: ["text"],
additionalProperties: false
} as const satisfies Schema;
const form = createForm<FromSchema<typeof schema>>({
...defaults,
schema,
})

TypeBox offers a unified type that can be statically checked by TypeScript and runtime asserted using standard Json Schema validation.

Terminal window
npm i typebox
import { Type, type Static } from "typebox";
import { createForm, type UiSchema } from "@sjsf/form";
import * as defaults from "@/lib/form/defaults";
const schema = Type.Object({
text: Type.String(),
});
const uiSchema: UiSchema = {
"ui:options": {
title: "Form title",
},
text: {
"ui:options": {
title: "Text input",
},
},
};
const form = createForm<Static<typeof schema>>({
...defaults,
schema,
uiSchema,
});