UNPKG

@fluent-form/core

Version:

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

44 lines (43 loc) 1.66 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; /** 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 可以构建 */ export type Builder<T extends Record<string, SafeAny>, C extends keyof T = keyof T, N extends keyof T = NonNullableKey<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 ? (it: Builder<T>) => SafeAny : T[K]) => Builder<T, C, N, S | K, [ N ] extends [S | K] ? BuildKey : never>); }; export type StableBuilder<T> = Record<BuildKey, () => T>; /** * @template T 原型 * @template S 已选字段 * @template N 必填字段 */ export type UnstableBuilder<T extends Record<string, SafeAny>, S extends keyof T, N extends keyof T = NonNullableKey<T>> = Builder<T, keyof T, N, S, [ N ] extends [S] ? BuildKey : never>; export {};