JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 196
  • Score
    100M100P100Q73921F
  • License MIT

Type checker for typescript

Package Exports

  • ts-check

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ts-check) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

TypeChecker for JavaScript/Typescript

Author : lessu

Description

A flexable type checker.

tested under typescript 2.3.4 and 2.4.2, 2.8.1; es5 is now supported

Installation

npm install ts-check --save 

Test

mocha tests/index.js

Features

Flexable,easy-to-extend type checker for complex object.

example

TypeChecker.checkType(sku,"SetSkuItem[]",{
    SetSkuItem : {
        key         : "string",
        stock       : "number",
        unit        : "number",
        price       : "number",
        cost_price  : "number",
        options     : "ItemOptions[]"
    },
    ItemOptions : {
        filed_id : "number",
        filed_options:["number","string"]
    }
});

Update Log

  • v0.2.3

    1.New feature added : now we can get failed log message by access lastError variable.

    2.Fix type error synax under typescript 2.8.1

Usage

import

import * as TypeChecker from "ts-checker";

Basic Type

Basic type include

export enum BasicTypes{
    number      = "number",
    string      = "string",
    object      = "object",
    any         = "any",
    null        = "null",
    undefined   = "undefined"
}

Check basic types :

TypeCheker.checkType(undefined,"undefined");

TypeCheker.checkType(null,"any");

TypeCheker.checkType(123,"number");

//Notice a string number is also a number type in weak Number mode;
TypeCheker.checkType("123","number",{},{weakNumber:true});

Check Array

any length

assert(TypeCheker.checkType([1,2,3,4,5,6],"number[]"));

check length

assert(TypeCheker.checkType([1,2,3],"number[3]"));
assert(!TypeCheker.checkType([1,2,3],"number[2]"));

array array

assert(TypeCheker.checkType([[1],[2],[3]],"number[1][3]"));
assert(TypeCheker.checkType([[1],[2],[3]],"number[][3]"));

Check function

Signature

((value:any)=>boolean);

Usage

TypeCheker.checkType( { a : "1" },(value)=>{
    return typeof value["a"] == "string";
});

Nested Check

TypeCheker.checkType({a:"1"},{
    a : "string"
});

TypeCheker.checkType({
    a:"1",
    b:{c:1},
    c:{
        d:{
            e:1
        }
    }
},{
    a : "string",
    b : function(value:any){
        return typeof value.c == "number";
    },
    c : {
        d : {
            e : "number"
        }
    }
});

Type array

The checked value can be string, number or {a:number};

TypeCheker.checkType({a:1},["string","number",{
    a : "number"
}]);

Customized types DefainedTypes

//definedTypes is a {customType => check} object.
TypeCheker.checkType(value,type,definedTypes);
TypeCheker.checkType(
//to check
{
    biggerThan0 : 2
},
//type
{
    biggerThan0 : ">0"
},
//custom type,define >0 as a custom type , and can be used in typeChecker
{
    ">0" : function( value : any ){
        if(typeof value == "number"){
            return value > 0;
        }else{
            return parseInt(value) > 0
        }
    }
});

//custom type can be nested
TypeCheker.checkType({
    biggerThan0 : [1,2,3,4]
},{
    biggerThan0 : ">0[]"
},{
    ">0" : function(value:any){
        if(typeof value == "number"){
            return value > 0;
        }else{
            return parseInt(value) > 0
        }
    }
});

//or a real life example
TypeChecker.checkType(sku,"SetSkuItem[]",{
    SetSkuItem : {
        key         : "string",
        stock       : "number",
        unit        : "number",
        price       : "number",
        cost_price  : "number",
        options     : "ItemOptions[]"
    },
    ItemOptions : {
        filed_id : "number",
        filed_options:["number","string"]
    }
});

DefinedType With args

If a DefinedType is a function, args are supported;

Notice,Args will be convert to pure string ; every , is recognized as a splitor, So DO NOT call like CustomType(a,"1,2,3"), It will convert to

[
    "a",
    "\"1",
    "2",
    "3\""
]
assert(!
    TypeCheker.checkType({
        biggerThan0 : 6
    },<any>{
        biggerThan0 : "range(0,5)"
    },{
        "range" : function(value:any,args:string[]){
            if(args.length==0){
                return false;
            }else if(args.length == 1){
                return value> parseFloat(args[0]);
            }else{
                return value >= parseFloat(args[0]) && value <= parseFloat(args[1]);
            }
        }
    })
);

Default defined type

Custom type can be add to default defaultDefinedChecker object; so that can be used any where.

TypeCheker.defaultDefinedChecker[">0"] = function(value:any){
    if(typeof value == "number"){
        return value > 0;
    }else{
        return parseInt(value) > 0
    }
};
assert(TypeCheker.checkType({a:1},{a:">0"}));
assert(!TypeCheker.checkType({a:-1},{a:">0"}));

License

MIT