@fluent-form/core
Version:
An Angular dynamic forms library powered by Fluent API and JSON.
37 lines (36 loc) • 1.71 kB
TypeScript
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 {};