@gilbarbara/types
v0.2.2
Published
Reusable typescript typings
Downloads
167,068
Readme
@gilbarbara/types
Reusable typescript typings.
Setup
npm i @gilbarbara/types
For convenience, the type-fest
package is re-exported.
Types
Aliases
type NumberOrNull = number | null;
type StringOrNull = string | null;
type StringOrNumber = string | number;
type PlainObject<T = unknown> = Record<string, T>;
type GenericFunction<T = unknown> = (...arguments_: any[]) => T;
type VoidFunction = () => void;
Common
type AsyncStatus = 'IDLE' | 'PENDING' | 'SUCCESS' | 'ERROR';
interface AsyncFlow {
message: string;
status: AsyncStatus;
}
interface AsyncFlowWithCache extends AsyncFlow {
updatedAt: number;
}
interface AsyncFlowWithData<T = any> extends AsyncFlow {
data: T;
}
interface AsyncFlowWithDataAndCache<T = any> extends AsyncFlowWithData<T> {
updatedAt: number;
}
type HttpMethods =
| 'CONNECT'
| 'DELETE'
| 'GET'
| 'HEAD'
| 'OPTIONS'
| 'PATCH'
| 'POST'
| 'PUT';
interface IdName {
id: string;
name: string;
}
interface LabelValue {
label: string;
value: string;
}
Utilities
/**
* Narrow down a Record to a plain object.
*/
type NarrowPlainObject<T extends Record<string, any>> = Exclude<
T,
Array<unknown> | Function | Map<unknown, unknown> | Set<unknown>
>;
/**
* An object without excluded types.
*/
type RemoveType<TObject, TExclude = undefined> = {
[Key in keyof TObject as TObject[Key] extends TExclude ? never : Key]: TObject[Key];
};
/**
* A strict plain object with a specific set of keys.
*/
type StrictObject<TObject extends Record<PropertyKey, unknown>, TExpected> = TExpected & {
[Key in keyof TObject]: Key extends keyof TExpected ? TExpected[Key] : never;
};