export type FormItem = | { label?: string; type: "string"; default: string | null; hidden?: boolean; multiline?: boolean; } | { label?: string; type: "number"; default: number | null; hidden?: boolean; step?: number; } | { label?: string; type: "boolean"; default: boolean | null; hidden?: boolean; } | { label?: string; type: "enum"; default: string | null; hidden?: boolean; enum: string[]; } | { label?: string; type: "radio"; default: unknown | null; hidden?: boolean; options: { label: string; value: unknown; }[]; } | { label?: string; type: "object"; default: Record | null; hidden: true; } | { label?: string; type: "array"; default: unknown[] | null; hidden: true; }; export type Form = Record; type GetItemType = Item["type"] extends "string" ? string : Item["type"] extends "number" ? number : Item["type"] extends "boolean" ? boolean : Item["type"] extends "radio" ? unknown : Item["type"] extends "enum" ? string : Item["type"] extends "array" ? unknown[] : Item["type"] extends "object" ? Record : never; export type GetFormResultType = { [P in keyof F]: GetItemType; };