Skip to content

thebearingedge/type-diff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

type-diff

Simple, readable, structural type comparisons.

Build Status Coverage Status Greenkeeper badge dependencies Status devDependencies Status

Quick Example

import assert from 'assert'
import { diff, Nullable, Optional, Any } from 'type-diff'

const Type = {
  id: Number,
  tags: [String]
  contacts: [{
    id: Number,
    name: String,
    contacted: Nullable(Date),
    tags: Optional([String]),
    wharrgarbl: Any()
  }]
}

const value = {
  id: 1,
  tags: ['good', 'cool'],
  contacts: [
    { id: 2, name: 'John Doe', contacted: null, wharrgarbl: _ => 'wheee' },
    { id: '3', name: 'Jane Doe', contacted: new Date(), tags: ['cool'] }
  ]
}

assert.deepEqual(diff(Type, value), {
  contacts: {
    '1': {
      id: {
        actual: 'String',
        expected: 'Number',
        value: '3'
      },
      wharrgarbl: {
        actual: 'Undefined',
        expected: 'Any'
      }
    }
  }
})

Usage

diff(Type, value)

Generate an object literal representation of the difference between your Type and a given value as shown above in the Quick Example.

Supported Built-ins

  • Number
  • String
  • Boolean
  • Object
  • Array
  • Date
  • Function

Helpers

Nullable(Type): Allows the corresponding value to be either the correct Type or null.

Optional(Type): Allows the corresponding value to be either the correct Type or undefined.

Any | Any(): Requires that the corresponding value be anything but undefined. Used in conjuction with Optional if undefined is allowed; as in Optional(Any)

About

Simple, readable, structural type comparisons.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published