UNPKG

@fluent-form/core

Version:

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

49 lines (48 loc) 1.69 kB
import type { SafeAny } from '@ngify/core'; interface Schema { [k: string]: SafeAny; schemas?: Schema[]; } declare const COMPOSE_KEY = "schemas"; export declare function applyRoot(schema: Schema): void; declare const BUILD_KEY = "build"; export declare function composeBuilder<T>(): 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 Buildable = Record<BuildKey, unknown>; /** Get the non-nullable and required keys of an interface. */ type NonNullableKey<T> = { [K in keyof T]-?: Record<K, T[K]> extends { [_ in K]-?: T[K]; } ? K : never; }[keyof T]; /** * @template T 原型 * @template C 候选 * @template N 必填字段 * @template S 已选字段 * @template B 可以构建 */ type _Builder<T extends Buildable, C extends keyof T, N extends keyof T, S extends keyof T = never, B extends BuildKey = never> = { [K in keyof Pick<T, Exclude<C, S> | B>]-?: (K extends BuildKey ? () => Pick<T, S> : (val: K extends ComposeKey ? () => SafeAny : T[K]) => _Builder<T, C, N, S | K, [ N ] extends [S | K] ? BuildKey : never>); }; /** * @template T 原型 */ export type Builder<T> = _Builder<T & Buildable, keyof T, NonNullableKey<T>>; export type StableBuilder<T> = Record<BuildKey, () => T>; /** * @template T 原型 * @template S 已选字段 * @template N 必填字段 */ export type UnstableBuilder<T, S extends keyof T, N extends keyof T = NonNullableKey<T>> = _Builder<T & Buildable, keyof T, N, S, [ N ] extends [S] ? BuildKey : never>; export {};