Another biased type checking solution for Javascript
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Daniel Cousens 438e34dab6 .gitignore: rm lib 8 years ago
bench update bench 9 years ago
scripts fix surrogate types only showing child type in errors 9 years ago
test allow creation of `TfTypeError` with 1st and only argument the message. 8 years ago
.gitignore .gitignore: rm lib 8 years ago
.travis.yml travis: add 6 8 years ago
LICENSE Initial commit 10 years ago
README.md Fix oneOf in README.md 8 years ago
index.js allow creation of `TfTypeError` with 1st and only argument the message. 8 years ago
package.json 1.6.2 8 years ago

README.md

typeforce

build status Version

Another biased type checking solution for Javascript.

Examples

var typeforce = require('typeforce')

var element = { prop: 'foo' }
var elementNumber = { prop: 2 }
var array = [element, element, elementNumber]

// supported primitives 'Array', 'Boolean', 'Buffer', 'Number', 'Object', 'String'
typeforce('Array', array)

typeforce('Number', array)
// TypeError: Expected Number, got Array

// array types
typeforce(['Object'], array)
typeforce(typeforce.arrayOf('Object'), array)

// supports recursive type templating
typeforce({ prop: 'Number' }, elementNumber)

// maybe types
typeforce('?Number', 2)
typeforce('?Number', null)
typeforce(typeforce.maybe(typeforce.Number), 2)
typeforce(typeforce.maybe(typeforce.Number), null)

// sum types
typeforce(typeforce.oneOf('String', 'Number'))

// value types
typeforce(typeforce.value(3.14), 3.14)

// custom types
function LongString (value, strict) {
	if (!typeforce.String(value)) return false
	if (value.length !== 32) return false
	return true
}

typeforce(LongString, '00000000000000000000000000000000')
// => OK!

typeforce(LongString, 'not long enough')
// TypeError: Expected LongString, got String 'not long enough'

Protips:

// use precompiled primitives for high performance
typeforce(typeforce.Array, array)

// or just precompile a template
var type = {
	foo: 'Number',
	bar: '?String'
}

var fastType = typeforce.compile(type)
// fastType => typeforce.object({
//   foo: typeforce.Number,
//   bar: typeforce.maybe(typeforce.String)
// })

// use strictness for recursive types to enforce whitelisting properties
typeforce({
	x: 'Number'
}, { x: 1 }, true)
// OK!

typeforce({
	x: 'Number'
}, { x: 1, y: 2 }, true)
// TypeError: Unexpected property 'y' of type Number

License

This library is free and open-source software released under the MIT license.