UNPKG

@sprucelabs/schema

Version:

Static and dynamic binding plus runtime validation and transformation to ensure your app is sound. 🤓

13 lines (12 loc) • 1.03 kB
import { SelectFieldDefinition, SelectChoice } from '../fields/SelectField.types'; import { Schema, SchemaFieldsByName, PickFieldNames } from '../schemas.static.types'; /** Turn select options into a key/value pair */ export type SelectChoicesToHash<Options extends SelectChoice[]> = { [P in Options[number]['value']]: Extract<Options[number], { label: P; }>['label']; }; /** Pass the select options directly to create a value/label hash */ export declare function selectChoicesToHash<Options extends SelectChoice[]>(options: Options): SelectChoicesToHash<Options>; /** Take a definition and a field name and returns a value/label hash */ export declare function schemaChoicesToHash<S extends Schema, F extends PickFieldNames<S, 'select'>>(definition: S, fieldName: F): S['fields'] extends SchemaFieldsByName ? S['fields'][F] extends SelectFieldDefinition ? S['fields'][F]['options'] extends SelectFieldDefinition['options'] ? SelectChoicesToHash<S['fields'][F]['options']['choices']> : never : never : never;