export interface SuccessResponse<T> extends ResponseEntity {
data: T;
}
export interface FailureResponse<T> extends ResponseEntity {
error: T;
}
// type-guard
export function isSuccessResponseTypeGuard<T>(data: ResponseEntity): data is SuccessResponse<T> {
return (<SuccessResponse<T>>data).data !== undefined;
}
// use
if (!isSuccessResponseTypeGuard<IUser>(result)) {
throw new UnauthorizedException(result.message);
}
function isFish(pet: Fish | Bird): pet is Fish {
return (<Fish>pet).swim !== undefined;
}
// Both calls to 'swim' and 'fly' are now okay.
if (isFish(pet)) {
pet.swim();
}
else {
pet.fly();
}