all other assertion packages on this damned registry are awful
god awful.
Just use this one, it's like 4 lines of code and typescript declarations
It runs on the browser without polyfills like process for assert. Works well with io-ts.
If you want something for test harnesses and more of a natural/flexible style, you may want to use mocha and chai instead.
import{assert}from'assertmin';// Boolean assertionsassert(2+2===4);functionisGoodBoy(name){returnname==='dog';}assert(isGoodBoy('dog'));assert(!isGoodBoy('doru'));// Equality assertionsassert.eq(Math.ceil(Math.random()*42),42);// TypeScript assertionstypeArg=number|null;functionpad(n: Arg){// By the point this function is called, you're certain `n` is a number// But typescript doesn't know that, so assert that is the case// Otherwise useful if you want this function to be a contract checker// and raise an exception to catch in the case of a violationassert(n!==null,"pad should never be called with null");// If you're particularly confident, you can use `assert.unchecked`// It won't perform any checks internally, but will still assert// to typescript that the condition is trueassert.unchecked(n<=-1,"no negative padding");// If you have webpack or another smart bundler,// `assert.dev` only runs code when `process.env.NODE_ENV`// is not equal to "production"assert.dev(n>1000000,"millions range reserved for production");// Now you can use it normally// All assertion messages above are optional - will be replaced by a generic assertion errorreturnn.toString().padStart(2,'0');}// Exhaustiveness checkstypeA={letter: 'a';};typeB={letter: 'b';};typeLetter=A|B;constletter: Letter={letter: 'b';};switch(letter.letter){case'a':
break;case'b':
// Try commenting this case outbreak;default:
assert.unreachable(letter);}// Works well with io-tsimport*astfrom'io-ts';constAnonymous=t.type({type: t.literal('anonymous'),ip: t.string});constUser=t.type({type: t.literal('user'),name: t.string,permissions: t.array(t.string)});constResponse=t.union([Anonymous,User]);constresult=await(awaitfetch('...')).json();assert(Response.is(result),"server returned something strange");assert(result.type!=='anonymous',"anons not allowed here");assert(result.permissions.includes("admin"),"try becoming an admin");