diff options
Diffstat (limited to 'src/new_fields')
| -rw-r--r-- | src/new_fields/Schema.ts | 15 | ||||
| -rw-r--r-- | src/new_fields/Types.ts | 2 |
2 files changed, 11 insertions, 6 deletions
diff --git a/src/new_fields/Schema.ts b/src/new_fields/Schema.ts index 1d1f56844..6022716be 100644 --- a/src/new_fields/Schema.ts +++ b/src/new_fields/Schema.ts @@ -1,9 +1,10 @@ import { Interface, ToInterface, Cast, FieldCtor, ToConstructor, HasTail, Head, Tail } from "./Types"; -import { Doc } from "./Doc"; +import { Doc, Field, ObjectField } from "./Doc"; +import { URLField } from "./URLField"; -type All<T extends any[], U extends Doc> = { - 1: makeInterface<Head<T>, U> & All<Tail<T>, U>, - 0: makeInterface<Head<T>, U> +type All<T extends Interface[], U extends Doc> = { + 1: makeInterface<[Head<T>], U> & All<Tail<T>, U>, + 0: makeInterface<[Head<T>], U> }[HasTail<T> extends true ? 1 : 0]; type AllToInterface<T extends any[]> = { @@ -11,10 +12,14 @@ type AllToInterface<T extends any[]> = { 0: ToInterface<Head<T>> }[HasTail<T> extends true ? 1 : 0]; +export const emptySchema = createSchema({}); +export const Document = makeInterface(emptySchema); +export type Document = makeInterface<[typeof emptySchema]>; + export type makeInterface<T extends Interface[], U extends Doc = Doc> = Partial<AllToInterface<T>> & U; // export function makeInterface<T extends Interface[], U extends Doc>(schemas: T): (doc: U) => All<T, U>; // export function makeInterface<T extends Interface, U extends Doc>(schema: T): (doc: U) => makeInterface<T, U>; -export function makeInterface<T extends Interface[], U extends Doc>(schemas: T): (doc: U) => All<T, U> { +export function makeInterface<T extends Interface[], U extends Doc>(...schemas: T): (doc: U) => makeInterface<T, U> { let schema: Interface = {}; for (const s of schemas) { for (const key in s) { diff --git a/src/new_fields/Types.ts b/src/new_fields/Types.ts index 0392dc2fb..e4d15e276 100644 --- a/src/new_fields/Types.ts +++ b/src/new_fields/Types.ts @@ -11,7 +11,7 @@ export type ToType<T> = export type ToConstructor<T> = T extends string ? "string" : T extends number ? "number" : - T extends boolean ? "boolean" : { new(...args: any[]): T }; + T extends boolean ? "boolean" : new (...args: any[]) => T; export type ToInterface<T> = { [P in keyof T]: ToType<T[P]>; |
