@fluent-form/core
Version:
An Angular dynamic forms library powered by Fluent API and JSON.
44 lines (43 loc) • 1.66 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;
/** 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 {};