Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Low-level type-centric utility functions for Javascript. Provides inheritance, mixins, and function reflection helpers.
JavaScript
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
test
.gitignore
.jshintrc
.tern-project
.travis.yml
HISTORY.md
LICENSE
README.md
index.js
package.json

README.md

Typedef

Build Status NPM version

Low-level type-centric utility functions for Javascript.

browser support

Installation

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

npm install typedef

Usage

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

foo.method();
// hello from base class

foo.method2();
// 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)
{
  ...
}

getArguments(foo);
// ['a', 'b', 'c']

getName(foo);
// '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

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

Automated CI cross-browser testing is provided by Testling.

License

Copyright 2014 Brandon Valosek

Typedef is released under the MIT license.

Something went wrong with that request. Please try again.