GithubHelp home page GithubHelp logo

andrews-utils's Introduction

Andrew's Utils

A collection of random useful utility functions that you may not find in lodash. These utility functions are emitted as ES6 modules so that they are tree-shakable.

Type Guards

This utility library provides a series of generic TypeScript type guards for validating your data.

hasOwnProperties

This type guard validates that the provided object contains the provided property names.

hasOwnProperties Interface

function hasOwnProperties<
  X extends Record<any, unknown>,
  Y extends PropertyKey,
  A extends Y[]
>(obj: X, props: A) => obj is X & Record<Y, unknown>;

hasOwnProperties Example

import { isObject, hasOwnProperties } from 'andrews-utils';

const val: unknown = {
  foo: 'bar',
  hello: 'world',
};

if (isObject(val) && hasOwnProperties(val, ['foo', 'hello'])) {
  // -> do something with obj.foo or obj.hello
}

hasOwnProperty

This type guard validates that the provided object contains the provided property.

hasOwnProperty Interface

function hasOwnProperty<X extends Record<any, unknown>, Y extends PropertyKey>(
  obj: X,
  prop: Y
) => obj is X & Record<Y, unknown>;

hasOwnProperty Example

import { isObject, hasOwnProperty } from 'andrews-utils';

const val: unknown = {
  foo: 'bar',
  hello: 'world',
};

if (isObject(val) && hasOwnProperty(val, 'foo')) {
}

isArray

This type guard validates that the provided value is an array.

isArray Interface

function isArray(value: unknown) => value is unknown[];

isArray Example

import { isArray } from 'andrews-utils';

const arr: unknown = ['foo', 'bar'];

if (isArray(arr)) {
  arr.forEach(val => {});
}

isNumber

This type guard validates that the provided value is a number.

isNumber Interface

function isNumber(value: unknown) => value is number;

isNumber Example

import { isNumber } from 'andrews-utils';

const val: unknown = 123;

if (isNumber(val)) {
  const answer = val * 2;
}

isObject

This type guard validates that the provided value is an object.

isObject Interface

function isObject(value: unknown) => value is Record<string, unknown>;

isObject Example

import { isObject } from 'andrews-utils';

const obj: unknown = {
  foo: 'bar',
};

if (isObject(val)) {
  // Do something with object with unknown properties.
  // Usually you would combine this with the hasOwnProperties type guard.
}

isSet

This type guard validates that the provided value is not undefined or null.

isSet Interface

function isSet<T>(value?: unknown) => value is NonNullable<T>;

isSet Example

import { isSet } from 'andrews-utils';

const val: unknown = 123;

if (isSet<number>(val)) {
  const answer = val * 2;
}

isString

This type guard validates that the provided value is a string.

isString Interface

function isString(value: unknown) => value is string;

isString Example

import { isString } from 'andrews-utils';

const val: unknown = 'foo';

if (isString(val)) {
  const chars = val.split('');
}

safeJsonFetch

Executes a standard fetch but returns the JSON response as unknown to force you to validate it.

safeJsonFetch Interface

async function safeJsonFetch(
  input: RequestInfo | URL,
  init?: RequestInit | undefined
) => Promise<unknown>;

safeJsonFetch Example

import { safeJsonFetch } from 'andrews-utils';

safeJsonFetch('https://example.com/user/1').then(json => {
  const answer = json * 2;
  // => TSError: Object is of type 'unknown'.ts(2571)
  // This error is expected because json should be of type `unknown`.
});

andrews-utils's People

Contributors

ajstacy avatar

Stargazers

 avatar

Watchers

 avatar

andrews-utils's Issues

The automated release is failing 🚨

🚨 The automated release from the master branch failed. 🚨

I recommend you give this issue a high priority, so other packages depending on you can benefit from your bug fixes and new features again.

You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can fix this πŸ’ͺ.

Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.

Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the master branch. You can also manually restart the failed CI job that runs semantic-release.

If you are not sure how to resolve this, here are some links that can help you:

If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.


No npm token specified.

An npm token must be created and set in the NPM_TOKEN environment variable on your CI environment.

Please make sure to create an npm token and to set it in the NPM_TOKEN environment variable on your CI environment. The token must allow to publish to the registry https://registry.npmjs.org/.


Good luck with your project ✨

Your semantic-release bot πŸ“¦πŸš€

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.