2.1.0 • Published 1 year ago

ts-type-check v2.1.0

Weekly downloads
2
License
BSD-2-Clause
Repository
github
Last release
1 year ago

ts-type-check

Check json value based of Typescript type in string, throw express-compatible error with 400 statusCode.

npm Package Version

Supported Data Type

  • string
  • number
  • boolean
  • Date
  • null
  • object (with required / optional fields)
  • Array
  • unions
  • intersections
  • unit types*

*: Unit types are the literal value of primitive types, e.g. true | false | 'str' | 1

Typescript signatures

checkTsType() can be used for one-off type checking.

/**
 * only check for json-compatible types
 *
 * @throws TypeCheckError if failed
 * */
function checkTsType(type: string, data: any, options?: TypeCheckOptions): void

type TypeCheckOptions = {
  casualBoolean?: boolean
}

class TypeCheckError extends TypeError {
  statusCode = 400
  status = 400
  message: string
}

parseTsType() compiles the type string into a TypeChecker.

It is optimized for repeating type checking.

(It is used by checkTsType() internally.)

function parseTsType(type: Type): TypeChecker

interface TypeChecker {
  type: string
  check(data: any, options?: TypeCheckOptions): void
}

Example

import { checkTsType } from 'ts-type-check'

checkTsType('string', 'Alice')
// no error

checkTsType('{ UserId: string }', { UserId: 'Alice' })
// no error
checkTsType('{ UserId: string }', { UserId: 'Alice', Foo: 'bar' }, 'fail')
// throw exception complaining extra field `Foo`

More advanced type using nested object, |, and & are also supported.

import { checkTsType } from 'ts-type-check'

checkTsType(`'y' | 'n'`, 'n')
// no error
checkTsType(`1 | 2`, 1)
// no error
checkTsType(`'y' | 'n'`, 'foo')
// throw exception complaining wrong string value
checkTsType(`1 | 2`, 3)
// throw exception complaining wrong number value

checkTsType(
  `{
    UserId: string,
    Contact: {
      Method: 'telegram'
    } & ({ UserId: string } | { Tel: string }) | {
      Method: 'Email',
      Email: string
    }
  }`,
  {
    UserId: 'Alice',
    Contact: {
      Method: 'telegram',
      UserId: 'alice',
    },
  },
)
// no error
checkTsType(
  `{
    UserId: string,
    Contact: {
      Method: 'telegram'
    } & ({ UserId: string } | { Tel: string }) | {
      Method: 'Email',
      Email: string
    }
  }`,
  {
    UserId: 'Alice',
    Contact: {
      Method: 'Email',
      Email_: 'alice@domain.com',
    },
  },
)
// throw exception complaining missing field 'Email' (if the field is given, then will complain extra field 'Email_')

License

This project is licensed with BSD-2-Clause

This is free, libre, and open-source software. It comes down to four essential freedoms [ref]:

  • The freedom to run the program as you wish, for any purpose
  • The freedom to study how the program works, and change it so it does your computing as you wish
  • The freedom to redistribute copies so you can help others
  • The freedom to distribute copies of your modified versions to others
1.1.1

1 year ago

2.0.2

1 year ago

2.1.0

1 year ago

2.0.1

1 year ago

1.1.3

1 year ago

2.0.0

1 year ago

1.1.2

1 year ago

1.1.0

3 years ago

1.0.0

5 years ago