@gilbarbara/types
TypeScript icon, indicating that this package has built-in type declarations

0.2.2 • Public • Published

@gilbarbara/types

npm version CI

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;
};

Readme

Keywords

Package Sidebar

Install

npm i @gilbarbara/types

Weekly Downloads

87,610

Version

0.2.2

License

MIT

Unpacked Size

14.8 kB

Total Files

22

Last publish

Collaborators

  • gilbarbara