Skip to content

Commit ce3f393

Browse files
committed
Added concrete types and generics to define resolvers
1 parent 18de315 commit ce3f393

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

src/resolver.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
11
import { getPromise } from './promise';
22
import { isFunction, Promisify, isNotNullOrUndefined } from './util';
33

4+
const Promise = getPromise();
45

5-
export const createResolver = (resFn, errFn) => {
6+
export interface ResultFunction<ResulType> {
7+
(root, args, context, info): Promise<ResulType> | ResulType | void
8+
}
9+
10+
export interface ErrorFunction<ErrorType> {
11+
(root, args, context, err): ErrorType | void
12+
}
13+
14+
export interface Resolver<ResulType> {
15+
(root, args: {}, context: {}, info: {}): Promise<ResulType>
16+
createResolver?: <R, E>(resFn: ResultFunction<R>, errFn?: ErrorFunction<E>) => Resolver<R>
17+
}
18+
19+
export const createResolver = <R, E>(resFn: ResultFunction<R>, errFn: ErrorFunction<E>) => {
620
const Promise = getPromise();
7-
const baseResolver = (root, args = {}, context = {}, info = {}) => {
21+
const baseResolver: Resolver<R> = (root, args = {}, context = {}, info = {}) => {
822
// Return resolving promise with `null` if the resolver function param is not a function
923
if (!isFunction(resFn)) return Promise.resolve(null);
1024
return Promisify(resFn)(root, args, context, info).catch(e => {
@@ -20,7 +34,7 @@ export const createResolver = (resFn, errFn) => {
2034
});
2135
});
2236
};
23-
baseResolver['createResolver'] = (cResFn, cErrFn) => {
37+
baseResolver.createResolver = (cResFn, cErrFn) => {
2438
const Promise = getPromise();
2539

2640
const childResFn = (root, args, context, info = {}) => {

0 commit comments

Comments
 (0)