export type ResolvedValue = T | Promise; export type ResolvedList = T[] | Promise | Promise[]; export interface ConcreteClass { new(...args: any[]): T; } export type Instantiator = (value: { [key: string]: any }) => TClass; export function defaultInputFieldInstantiator(value: any) { return value; } export type Thunk = () => T;