node package manager
Loosely couple your services. Use Orgs to version and reuse your code. Create a free org »



Build Status NPM version

Low-level type-centric utility functions for Javascript.

browser support


Typedef can be used on the server with NodeJS or on the client, built with Browserify, so install with npm:

npm install typedef


extends(Child, Base)

While traditionally, favoring composition over inheritance in Javascript is typically the way to go, classic inheritance can be useful if used sparingly.

This is the extends function that is used in Typescript, Coffeescript, ES6 compilers, etc. It uses prototypes to setup something similar to to classical single inheritance.

var extends_ = require('typedef').extends;
function Base()
  console.log('base ctor');
Base.prototype.method = function()
  console.log('hello from base class');
extends_(Child, Base);
function Child()
  // Call base constructor 
  Child.Super.apply(this, arguments);
  console.log('child ctor');
Child.prototype.method2 = function()
  console.log('hello from child class');
var foo = new Child();
// base ctor 
// child ctor 
// hello from base class 
// hello from child class 
foo instanceof Child;
// true 
foo instanceof Base;
// true 

mixin(Constructor, Mixin)

Class composition method. Mixin methods into Constructor.prototype.

If Mixin is a constructor function (class), then mixin all static properties into Constructor, and everything on Mixin.prototype to Constructor.prototype. If Mixin is just a Plain Old Object, then simply add the members of Mixin to Contructor.prototype.

getArguments(f) and getName(f)

Get the name of all the parameters or name for function f.

var getArguments = require('typedef').getArguments;
var getName      = require('typedef').getName;
function foo(a, b, c)
// ['a', 'b', 'c'] 
// 'foo' 

Tern Support

The library files are all decorated with JSDoc3-style annotations that work great with the Tern code inference system. Combined with the Node plugin (see this project's .tern-project file), you can have intelligent autocomplete for methods in this library.


Testing is done with Tape and can be run with the command npm test.

Automated CI cross-browser testing is provided by Testling.


Copyright 2014 Brandon Valosek

Typedef is released under the MIT license.