ErrorResultGuard
ErrorResultGuard
A utility class which is used to assert the success of an operation
which returns a union type of SuccessType | ErrorResponse [ | ErrorResponse ]
.
The methods of this class are used to:
- assert that the result is a success or error case
- narrow the type so that TypeScript can correctly infer the properties of the result.
Example
const orderResultGuard: ErrorResultGuard<AddItemToOrderResult>
= createErrorResultGuard(order => !!order.lines);
it('errors when quantity is negative', async () => {
const { addItemToOrder } = await shopClient.query<AddItemToOrder.Query, AddItemToOrder.Mutation>(ADD_ITEM_TO_ORDER, {
productVariantId: 42, quantity: -1,
});
// The test will fail
orderResultGuard.assertErrorResult(addItemToOrder);
// the type of `addItemToOrder` has now been
// narrowed to only include the ErrorResult types.
expect(addItemToOrder.errorCode).toBe(ErrorCode.NegativeQuantityError);
}
Signature
class ErrorResultGuard<T> {
constructor(testFn: (input: T) => boolean)
isSuccess(input: T | any) => input is T;
assertSuccess(input: T | R) => asserts input is T;
assertErrorResult(input: T | R) => asserts input is R;
}
constructor
method
(testFn: (input: T) => boolean) => ErrorResultGuard
isSuccess
method
(input: T | any) => input is T
A type guard which returns true
if the input passes the testFn
predicate.
assertSuccess
method
(input: T | R) => asserts input is T
Asserts (using the testing library's fail()
function) that the input is
successful, i.e. it passes the testFn
.
assertErrorResult
method
(input: T | R) => asserts input is R
Asserts (using the testing library's fail()
function) that the input is
not successful, i.e. it does not pass the testFn
.