@mvst/ts-unions
Version:
TypeScript union types for Maybe and RemoteData with pattern matching
58 lines (57 loc) • 2.06 kB
TypeScript
export type RemoteData<T> = {
type: "Error";
error: Error;
} | {
type: "Loading";
} | {
type: "NotAsked";
} | {
type: "Success";
value: T;
};
type Pattern<T, TResult> = {
_?: () => TResult;
error?: (error: Error) => TResult;
loading?: () => TResult;
notAsked?: () => TResult;
success?: (value: T) => TResult;
};
declare function notAsked<T>(): RemoteData<T>;
declare function loading<T>(): RemoteData<T>;
declare function success<T>(value: T): RemoteData<T>;
declare function error<T>(error: Error): RemoteData<T>;
declare function isSuccess<T>(remoteData: RemoteData<T>): remoteData is {
type: "Success";
value: T;
};
declare function isError<T>(remoteData: RemoteData<T>): remoteData is {
type: "Error";
error: Error;
};
declare function isLoading<T>(remoteData: RemoteData<T>): remoteData is {
type: "Loading";
};
declare function isNotAsked<T>(remoteData: RemoteData<T>): remoteData is {
type: "NotAsked";
};
interface CurryWithDefault {
<T>(defaultValue: T, remoteData: RemoteData<T>): T;
<T>(defaultValue: T): (remoteData: RemoteData<T>) => T;
}
declare const withDefault: CurryWithDefault;
interface CurriedWhen {
<T, TResult>(pattern: Pattern<T, TResult>, remoteData: RemoteData<T>): TResult;
<T, TResult>(pattern: Pattern<T, TResult>): (remoteData: RemoteData<T>) => TResult;
}
declare const when: CurriedWhen;
interface CurriedMap {
<T, TResult>(fn: (value: T) => TResult, remoteData: RemoteData<T>): RemoteData<TResult>;
<T, TResult>(fn: (value: T) => TResult): (remoteData: RemoteData<T>) => RemoteData<TResult>;
}
declare const map: CurriedMap;
interface CurriedAndThen {
<T, TResult>(fn: (value: T) => RemoteData<TResult>, remoteData: RemoteData<T>): RemoteData<TResult>;
<T, TResult>(fn: (value: T) => RemoteData<TResult>): (remoteData: RemoteData<T>) => RemoteData<TResult>;
}
declare const andThen: CurriedAndThen;
export { andThen, error, isError, isLoading, isNotAsked, isSuccess, loading, map, notAsked, success, when, withDefault, };