https://github.com/hustcc/variable-type
๐ ~ 1 kb. Schema validation. ไธไธชๅชๆ 1 kb ็็จไบๅ้็ปๆๆ ก้ช็ๅบใ
https://github.com/hustcc/variable-type
checking prop-types type-check variable variable-type
Last synced: 9 months ago
JSON representation
๐ ~ 1 kb. Schema validation. ไธไธชๅชๆ 1 kb ็็จไบๅ้็ปๆๆ ก้ช็ๅบใ
- Host: GitHub
- URL: https://github.com/hustcc/variable-type
- Owner: hustcc
- License: mit
- Created: 2017-08-01T01:50:59.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-01-13T01:52:06.000Z (almost 6 years ago)
- Last Synced: 2025-03-17T07:51:31.356Z (9 months ago)
- Topics: checking, prop-types, type-check, variable, variable-type
- Language: TypeScript
- Homepage: http://git.hust.cc/variable-type
- Size: 103 KB
- Stars: 24
- Watchers: 3
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# variable-type
> A high-performance javascript(`less then 1 kb`) library, runtime **type checking** for variable and similar objects.
>
> ไธไธช้ๅธธ็ฎๅ็๏ผไป
1 kb๏ผ้ซๆง่ฝ็็จไบๅๅ้็ปๆๆ ก้ช็ JavaScript ๆจกๅใ
>
> Inspired by [prop-types](https://github.com/facebook/prop-types).
[](https://www.npmjs.com/package/variable-type)
[](https://github.com/hustcc/variable-type/actions)
[](https://coveralls.io/github/hustcc/variable-type?branch=master)
[](https://www.npmjs.com/package/variable-type)
[](https://www.npmjs.com/package/variable-type)
## 1. Install
> **npm i --save variable-type**
Then import it.
```ts
import VT from 'variable-type';
```
## 2. API & Types
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](tests/test.ts).
If more Types are needed, welcome to `send a pull request`, or put an issue to me.
## 3. Usage examples
Here is some examples. More you can see in [test.ts](tests/test.ts) file.
- Simple usage
```js
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
```js
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');
```
- `Array` type.
```js
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.
```
- `Object` type.
```js
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.
```
- `Complex` example.
```js
// 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
```js
VT.shape({
name: VT.string,
birthday: VT.string,
sex: VT.string.optional()
}).check({
name: 'hustcc',
birthday: '1992-08-01'
}); // Then will get true.
```
## 4. Test & Perf
```
# install dependence
$ npm i
# run unit test
$ npm run test
# run performance test
$ npm run perf
```
> [OPS] variable-type / prop-types = 5.033
## License
MIT@[hustcc](https://github.com/hustcc).