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; };