JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 3
  • Score
    100M100P100Q36461F
  • License BSD-2-Clause

Check json value based of Typescript type in string

Package Exports

  • ts-type-check
  • ts-type-check/dist/index.js

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-type-check) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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
  • 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