diff --git a/packages/extension-form/src/internal/FormField.ts b/packages/extension-form/src/internal/FormField.ts index 21447a0..fce5fa2 100644 --- a/packages/extension-form/src/internal/FormField.ts +++ b/packages/extension-form/src/internal/FormField.ts @@ -11,15 +11,22 @@ export interface GenericFormField extends FormField readonly value: S["Type"] } -export interface TupleFormField> extends FormField { +export interface TupleFormField> extends FormField { readonly _tag: "TupleFormField" - readonly elements: { [K in keyof S]: FormTree.FormTree } + readonly elements: { readonly [K in keyof S["elements"]]: FormTree.FormTree< + S["elements"][K] extends Schema.Schema.Any + ? S["elements"][K] + : never + > } } export interface Tuple2FormField> extends FormField { readonly _tag: "Tuple2FormField" - // readonly elements: readonly [FormTree.FormTree, FormTree.FormTree] - readonly elements: [...{ [K in keyof S["elements"]]: S["elements"][K] }] + readonly elements: { readonly [K in keyof S["elements"]]: FormTree.FormTree< + S["elements"][K] extends Schema.Schema.Any + ? S["elements"][K] + : never + > } } export interface ArrayFormField> extends FormField { @@ -33,5 +40,5 @@ export interface StructFormField> extends FormField { readonly _tag: "StructFormField" - readonly fields: { [K in keyof S["fields"]]: FormTree.FormTree } + readonly fields: { readonly [K in keyof S["fields"]]: FormTree.FormTree } } diff --git a/packages/extension-form/src/internal/FormTree.ts b/packages/extension-form/src/internal/FormTree.ts index 9178055..e33ef0b 100644 --- a/packages/extension-form/src/internal/FormTree.ts +++ b/packages/extension-form/src/internal/FormTree.ts @@ -4,6 +4,7 @@ import type * as FormField from "./FormField.js" export type FormTree = ( S extends Schema.Tuple ? FormField.TupleFormField : + S extends Schema.Tuple2 ? FormField.Tuple2FormField : S extends Schema.Array$ ? FormField.ArrayFormField : S extends Schema.Struct ? FormField.StructFormField : FormField.GenericFormField