diff options
Diffstat (limited to 'src/new_fields/Types.ts')
| -rw-r--r-- | src/new_fields/Types.ts | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/new_fields/Types.ts b/src/new_fields/Types.ts index e4d15e276..f4f66fe5c 100644 --- a/src/new_fields/Types.ts +++ b/src/new_fields/Types.ts @@ -1,4 +1,4 @@ -import { Field, Opt, FieldWaiting, FieldValue } from "./Doc"; +import { Field, Opt, FieldWaiting, FieldResult } from "./Doc"; import { List } from "./List"; export type ToType<T> = @@ -6,7 +6,8 @@ export type ToType<T> = T extends "number" ? number : T extends "boolean" ? boolean : T extends ListSpec<infer U> ? List<U> : - T extends { new(...args: any[]): infer R } ? (R | Promise<R>) : never; + // T extends { new(...args: any[]): infer R } ? (R | Promise<R>) : never; + T extends { new(...args: any[]): infer R } ? R : never; export type ToConstructor<T> = T extends string ? "string" : @@ -35,9 +36,9 @@ export interface Interface { export type FieldCtor<T extends Field> = T extends List<infer R> ? ListSpec<R> : ToConstructor<T>; -export function Cast<T extends FieldCtor<Field>>(field: Field | FieldWaiting | undefined, ctor: T): FieldValue<ToType<T>>; +export function Cast<T extends FieldCtor<Field>>(field: Field | FieldWaiting | undefined, ctor: T): FieldResult<ToType<T>>; export function Cast<T extends FieldCtor<Field>>(field: Field | FieldWaiting | undefined, ctor: T, defaultVal: ToType<T>): ToType<T>; -export function Cast<T extends FieldCtor<Field>>(field: Field | FieldWaiting | undefined, ctor: T, defaultVal?: ToType<T>): FieldValue<ToType<T>> | undefined { +export function Cast<T extends FieldCtor<Field>>(field: Field | FieldWaiting | undefined, ctor: T, defaultVal?: ToType<T>): FieldResult<ToType<T>> | undefined { if (field instanceof Promise) { return defaultVal === undefined ? field.then(f => Cast(f, ctor) as any) : defaultVal; } @@ -66,6 +67,6 @@ export function FieldValue<T extends Field>(field: Opt<T> | Promise<Opt<T>>, def export interface PromiseLike<T> { then(callback: (field: Opt<T> | PromiseLike<T>) => void): void; } -export function PromiseValue<T extends Field>(field: FieldValue<T>): PromiseLike<Opt<T>> { +export function PromiseValue<T extends Field>(field: FieldResult<T>): PromiseLike<Opt<T>> { return field instanceof Promise ? field : { then(cb: ((field: Opt<T>) => void)) { return cb(field); } }; }
\ No newline at end of file |
