nikmash / supertype

A type system for JavaScript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

superType

Purpose

superType is a type system for javascript that supports

  • Classical inheritence

  • Mixins

  • Composition including collections

Installation

Include lib/index.js for use in the browser. Install on node via npm:

npm install supertype

It is automatically installed as a dependency for Amorphic

Example

Classes are defined as "templates".

ObjectTemplate = require('supertype');

Animal = ObjectTemplate.create("Animal",
{
    name: {type: String},
    isMammal: {type: Boolean, value: true},
    legs: {type: Number, value: 2}
});

Lion = Animal.extend("Lion",
{
    init: function () {
        Animal.call(this);
        this.name = "Lion";
        this.legs = 4;
    },
    canRoar: function () {return true}
});

Bear = Animal.extend("Bear",
{
    init: function () {
        Animal.call(this);
        this.name = "Bear";
    },
    canHug: function () {return true}
});

Ark = ObjectTemplate.create("Ark",
{
    animals: {type: Array, of: Animal, value: []},
    board: function (animal) {
        animal.ark = this;
        this.animals.push(animal)
    }
});
Animal.mixin(
{
    ark:    {type: Ark}
});

You create objects using new

var ark1 = new Ark();
ark1.board(new Lion());
ark1.board(new Bear());

var ark2 = new Ark();
ark2.board(new Lion());
ark2.board(new Bear());

Because superType knows about the interrelationships between your objects you can serialize and de-serialize even though you have circular references

var serialArk1 = ark1.toJSONString();
var serialArk2 = ark2.toJSONString();
ark1 = Ark.fromJSON(serialArk1);
ark2 = Ark.fromJSON(serialArk2);

License

superType is licensed under the MIT license

About

A type system for JavaScript

License:MIT License


Languages

Language:JavaScript 89.5%Language:TypeScript 10.5%