UNPKG

@fluent-form/core

Version:

An Angular dynamic forms library powered by Fluent API and JSON.

37 lines (36 loc) 1.71 kB
import type { SafeAny } from '@ngify/core'; interface Schema { [k: string]: SafeAny; schemas?: Schema[]; } declare const COMPOSE_KEY = "schemas"; export declare function getCurrentSchema(): Schema | undefined; declare const BUILD_KEY = "build"; export declare function composeBuilder<T extends Record<string, SafeAny>>(): Builder<T>; /** * Determines whether the value is a builder. */ export declare function isBuilder<T = unknown>(value: SafeAny): value is StableBuilder<T>; type ComposeKey = typeof COMPOSE_KEY; type BuildKey = typeof BUILD_KEY; type RequiredKey<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K; }[keyof T]; type ComposeFn<T extends Record<string, SafeAny>> = (it: Builder<T>) => SafeAny; /** * @template T 原型 * @template TCandidateKey 候选 * @template TRequiredKey 必填字段 * @template TSelectedKey 已选字段 */ export type Builder<T extends Record<string, SafeAny>, TCandidateKey extends keyof T = keyof T, TRequiredKey extends keyof T = RequiredKey<T>, TSelectedKey extends keyof T = never> = { [K in keyof Pick<T, Exclude<TCandidateKey, TSelectedKey>>]-?: ((val: K extends ComposeKey ? ComposeFn<T> : T[K]) => Builder<T, TCandidateKey, TRequiredKey, TSelectedKey | K>); } & Record<[TRequiredKey] extends [TSelectedKey] ? BuildKey : never, () => Pick<T, TSelectedKey>>; export type StableBuilder<T> = Record<BuildKey, () => T>; /** * @template T 原型 * @template TRequiredKey 必填字段 * @template TSelectedKey 已选字段 */ export type UnstableBuilder<T extends Record<string, SafeAny>, TSelectedKey extends keyof T, TRequiredKey extends keyof T = RequiredKey<T>> = Builder<T, keyof T, TRequiredKey, TSelectedKey>; export {};