static-type-js

0.3.3 • Public • Published

Type-js Build Status

Type checking support for javascript

  • All types are checked at runtime
  • Supported for ES5++ browsers.
  • Object roots are freezed after thy are created.
  • Initialized objects are prevented from extension.
  • To define object you must provide two objects to Type.create(type_definition, prototype);
  • _construct function is executed when object is constructed to inherit use _super(arguments) inside of _construct
  • _invoke is executed before _construct cross inherited objects on each object construction
  • _super() use _super(arguments) call to call inherited method.
  • _super is not allowed to be executed inside _invoke call
  • In IE 8,7,6 inheritance works but extensions and changes are allowed.
/// var Parent = Type.create([type definition], [prototype]);
/// var Child = Parent.inherit([type definition], [prototype]);
 
 
var AdminUser, Group, User;
Group = Type.create({
    _group: Type.STRING,
    invoked: Type.STRING
}, {
    _invoke: function(group) {
        this.invoked = group;
    },
    _construct: function(group) {
        this._group = group;
    },
    setGroup: function(value) {
        this._group = value;
    },
    getGroup: function() {
        return this._group;
    }
});
AdminUser = Group.inherit({
    username: Type.STIRNG,
    date: Type.DATE
},{
    _construct: function(username) {
        this.username = username;
        this.date = new Date;
        this._super('admin'); /// this will override group because parent is group
    },
    setUser: function(value) {
        this.username = value;
    }
});
User = AdminUser.inherit({
    username: Type.STIRNG,
    date: Type.DATE
},{
    _construct: function(username) {
        this.username = username;
        this.date = new Date;
        this._super('test'); // this will override username to test because parent is AdminUser
        this.setGroup('user'); // this will set group to user
    },
    setPassword: function(value) {
        // this is not allowed all members must be defined at initialization proces (in _construct)
        this.password = value;
    }
});
 
var user = new User('igor');
user.username = 1; // throws type error because initial value is string
user.date = new RegExp; // throw type error because initial value is date
user.date = new Date; // is allowed because is correct type
user.date = null; // its allowed because all members are allowed to be null or undefined because of GC
user.date = 1; // re assigning values with wrong type throws type error
user.date = new Date; // re assigning initial value is allowed
 
User.prototype.one = 1; // Will throw type error because adding something to prototype after initialization is not allowed
User.one = 1; // Extending roots is not allowed
 

Package Sidebar

Install

npm i static-type-js

Weekly Downloads

8

Version

0.3.3

License

none

Last publish

Collaborators

  • kikoninja
  • kiro.mihajlovski
  • igorzg