A high-performance javascript(
less then 1 kb) library, runtime type checking for variable and similar objects.ไธไธช้ๅธธ็ฎๅ็๏ผไป 1 kb๏ผ้ซๆง่ฝ็็จไบๅๅ้็ปๆๆ ก้ช็ JavaScript ๆจกๅใ
Inspired by prop-types.
npm i --save variable-type
Then import it.
import VT from 'variable-type';Before use it to check variable, you should make your Types.
And the library contains Types below:
- VT.bool
- VT.func
- VT.number
- VT.string
- VT.object
- VT.array
- VT.any
- VT.null
- VT.undefined
- VT.instanceOf(Class)
- VT.typeOf(String)
- VT.in(Array)
- VT.arrayOf(Type)
- VT.shape(TypeObject)
- VT.and(TypeArray)
- VT.or(TypeArray)
- VT.not(Type)
- VT.apply(Function)
The Type has 2 API:
- check(value)
- optional(): convent the type into optional.
You can see all the usage in the test cases file.
If more Types are needed, welcome to send a pull request, or put an issue to me.
Here is some examples. More you can see in test.ts file.
- Simple usage
VT.number.check(1992);
VT.string.check('hustcc');
VT.func.check(Math.min);
VT.bool.check(true);
VT.object.check({});
VT.array.check([1, 2, 3]);
VT.null.check(null);
VT.undefined.check(undefined);
VT.instanceOf(Date).check(new Date());
VT.in(['hustcc', 'hust', 'cc']).check('hustcc');- And / Or / Not
VT.not(VT.in(['hustcc', 'cc'])).check('hustcc');
VT.and([
   VT.string
   VT.in(['hustcc', 1992]),
]).check('hustcc');
VT.or([
   VT.number,
   VT.string,
]).check('hustcc');- Arraytype.
const arr = ['hello', 'world', 25, new Date(1992, 8, 1)];
 
const types = VT.arrayOf(
  VT.or([
    VT.number,
    VT.string,
    VT.instanceOf(Date)
  ])
);
types.check(arr); // will get true. - Objecttype.
const obj = {
  name: 'hustcc',
  boy: true,
  birthday: new Date(1992, 8, 1)
};
 
const types = VT.shape({
  name: VT.string,
  boy: VT.bool,
  birthday: VT.instanceOf(Date)
});
types.check(obj); // will get true. - Complexexample.
// The only API `check`.
VT.shape({
  a: VT.bool,
  b: VT.number,
  c: VT.string,
  d: VT.func,
  e: VT.instanceOf(Date),
  f: VT.in([1, '1']),
  g: VT.shape({
    h: VT.or([
      VT.shape({
        i: VT.arrayOf(
          VT.or([
            VT.number,
            VT.string,
            VT.bool,
            VT.shape({
              j: VT.func
            })
          ])
        )
      })
    ])
  })
}).check({
  a: true,
  b: 1,
  c: 'str',
  d: function() {},
  e: new Date(),
  f: '1',
  g: {
    h: {
      i: [
        '1',
        2,
        true,
        {
          j: function() {}
        }
      ]
    }
  }
}); // Then will get true.- Optional type
VT.shape({
  name: VT.string,
  birthday: VT.string,
  sex: VT.string.optional()
}).check({
  name: 'hustcc',
  birthday: '1992-08-01'
}); // Then will get true.# install dependence
$ npm i
# run unit test
$ npm run test
# run performance test
$ npm run perf
[OPS] variable-type / prop-types = 5.033
MIT@hustcc.