UNPKG

tgrid

Version:

Grid Computing Framework for TypeScript

27 lines (26 loc) 1.2 kB
import { Parametric } from "./Parametric"; import { Primitive } from "./Primitive"; /** * Promisify a function type. * * Return type of the target function would be promisified and primitified. * * - `Ret`: `Promise<Primitive<Ret>>` * - `Promise<Ret>`: `Promise<Primitive<Ret>>` * * @template Method A function type to be promisified. * @template UseParametric Whether to convert type of function parameters to be compatible with their pritimive. * @author Jeongho Nam - https://github.com/samchon */ export type Functional<Method extends Function, UseParametric extends boolean = false> = (Method extends (...args: infer Params) => infer Ret ? Ret extends Promise<infer PromiseRet> ? (...args: FunctionalParams<Params, UseParametric>) => Promise<Primitive<PromiseRet>> : (...args: FunctionalParams<Params, UseParametric>) => Promise<Primitive<Ret>> : (...args: any[]) => Promise<any>) & IRemoteFunction; /** * @hidden */ type FunctionalParams<Params extends any[], UseParametric extends boolean> = UseParametric extends true ? Parametric<Params> : Params; /** * Restrictions for Remote Function */ type IRemoteFunction = { [P in keyof Function | "Symbol"]: never; }; export {};